Module: CcipherFactory::CompositeCipher::SignEncryptor

Includes:
CcipherFactory::Common, CcipherFactory::Compression::CompressionHelper, TR::CondUtils
Defined in:
lib/ccipher_factory/composite_cipher/sign_encryptor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from CcipherFactory::Compression::CompressionHelper

#compress_data_if_active, #compression_off, #compression_on, #compressor, #decompress_data_if_active, #decompressor, #decompressor_from_encoded, #encode_null_compressor, #is_compression_on?, #logger

Methods included from CcipherFactory::Common

#attach_mode, #cleanup_intOutputBuf, #cleanup_intOutputFile, #detach_mode, #disposeOutput, #intOutputBuf, #intOutputFile, #is_attach_mode?, #is_output_given?, #output, #output_obj, #sanitize_symbol, #write_to_output

Instance Attribute Details

#encryption_keyObject

Returns the value of attribute encryption_key.



14
15
16
# File 'lib/ccipher_factory/composite_cipher/sign_encryptor.rb', line 14

def encryption_key
  @encryption_key
end

#sender_keypairObject

Returns the value of attribute sender_keypair.



14
15
16
# File 'lib/ccipher_factory/composite_cipher/sign_encryptor.rb', line 14

def sender_keypair
  @sender_keypair
end

#signing_keyObject

Returns the value of attribute signing_key.



14
15
16
# File 'lib/ccipher_factory/composite_cipher/sign_encryptor.rb', line 14

def signing_key
  @signing_key
end

Instance Method Details

#sign_encrypt_finalObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/ccipher_factory/composite_cipher/sign_encryptor.rb', line 78

def sign_encrypt_final

  smeta = @signer.att_sign_final 

  @signingBuf.rewind
  while not @signingBuf.eof?
    @enc.encrypt_update(@signingBuf.read)
  end

  meta = @enc.encrypt_final

  ts = BinStruct.instance.struct(:sign_encrypt_cipher)
  ts.signer_config = smeta
  ts.cipher_config = meta
  ts.encoded

end

#sign_encrypt_init(opts = { }, &block) ⇒ Object

Raises:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/ccipher_factory/composite_cipher/sign_encryptor.rb', line 16

def sign_encrypt_init(opts = {  }, &block)

  sKey = @signing_key
  eKey = @encryption_key
  sender = @sender_keypair

  compress = opts[:compress] || false

  raise CompositeCipherError, "Signing key is required" if is_empty?(sKey)
  raise CompositeCipherError, "Encryption key is required" if is_empty?(eKey)
  raise CompositeCipherError, "Output is required" if not is_output_given?

  @signingBuf = Tempfile.new
  @signingBuf.binmode

  case sKey
  when SymKey
    @signer = SymKeySigner.att_signer
    @signer.output(@signingBuf)
    @signer.compression_on if is_compression_on?
    @signer.signing_key = sKey
    @signer.att_sign_init
  when AsymKey
    @signer = AsymKeySigner.att_signer
    @signer.output(@signingBuf)
    @signer.compression_on if is_compression_on?
    @signer.signing_key = sKey
    @signer.att_sign_init
  else
    raise CompositeCipherError, "Unknown signing key type '#{sKey.class}'"
  end

  # Encryption Key
  case eKey
  when SymKey
    @enc = SymKeyCipher.encryptor
    @enc.output(@output)
    @enc.key = eKey
    @enc.encrypt_init
  when AsymKey, Ccrypto::PublicKey #, OpenSSL::PKey::EC::Point
    @enc = AsymKeyCipher.encryptor
    @enc.output(@output)
    @enc.recipient_key = eKey
    @enc.sender_keypair = sender if not_empty?(sender)
    @enc.encrypt_init
  else
    raise CompositeCipherError, "Unknown encryption key type '#{eKey.class}'"
  end

  if block
    instance_eval(&block)
    sign_encrypt_final
  else
    self
  end

end

#sign_encrypt_update(data) ⇒ Object



74
75
76
# File 'lib/ccipher_factory/composite_cipher/sign_encryptor.rb', line 74

def sign_encrypt_update(data)
  @signer.att_sign_update(data)   
end