Implements asymmetric cipher with public and private keys used to retrieve secret key (used for symmetric ciphering of peer-to-peer datagram packets) from remote peer. More...
Public Member Functions | |
AsymmetricCipher () | |
Generates a pair of keys and serializes public key as Base64 string. | |
boolean | isActive () |
Returns if cipher is properly initialized. | |
String | getSerializedAndSignedPublicKey () |
Returns serialized public key used for encryption of datagrams as Base64 string. | |
void | exportPublicKey (String fileName) |
Save public key into file. | |
String | getNamedPublicKey () |
Returns serializable named publicKey (with comment) encoded as Base64. | |
byte[] | decrypt (byte[] cipherText) |
Decrypts cipher text using the private key. | |
SignedObject | signObject (Serializable object) |
Signs object using private key. | |
SymmetricCipher | deserializeEncryptedSecretKey (String serializedSecretKey) |
Reconstructs secret key from Base64 respresentation of encrypted (using our public key) serialized secret key. | |
Static Public Member Functions | |
static boolean | saveObject (Serializable object, String fileName, String comment) |
Saves serializable object encoded in Base64 to file. | |
static Object | loadObject (String fileName) |
Loads serializable object encoded in Base64 from file. | |
Private Member Functions | |
void | destruct () |
Destructs object (makes it inactive) | |
boolean | loadSavedKeyPair () |
Load saved key pair. | |
void | saveKeyPair () |
Saves private/public key pair with description (this.keyPairComment) | |
void | generateKeyPair () |
Generates a key pair. | |
void | instantiateCipher () |
Instantiates a cipher. | |
void | serializePublicKey () |
Serializes the public key, signs it and encodes in Base64 format. | |
boolean | sanityCheck () |
Sanity check whether PublicEncryptor works with PrivateEncryption. | |
Private Attributes | |
PrivateKey | privateKey = null |
Private key used for deciphering and signing messages. | |
PublicKey | publicKey = null |
Public key corresponding to our private key. | |
String | keyPairComment = null |
The comment (description) of the key pair. | |
Cipher | cipher = null |
Instance of the decrypting engine based on our private key. | |
String | serializedPublicKey = null |
Our public key: serialized and encoded as Base64 string. | |
Static Private Attributes | |
static final String | algorithm = "RSA" |
Asymmetric cipher algorithm. | |
static final int | keySize = 1024 |
Default key size for algorithm. | |
static final String | padding = "/ECB/PKCS1PADDING" |
Padding to be used when ciphering/deciphering. | |
static final String | digest = "SHA1" |
Message digest used for creating/validating signatures. | |
static final String | privateKeyFile = "mykf-private-key.txt" |
The name of the file holding saved private key. | |
static final String | publicKeyFile = "mykf-public-key.txt" |
The name of the file holding saved public key. |
Implements asymmetric cipher with public and private keys used to retrieve secret key (used for symmetric ciphering of peer-to-peer datagram packets) from remote peer.
Remote peer sends its secret key encrypted with our public key.
Transmission of the SecretKey can be schematically shown:
Send secret key: secretKey >> serialize >> encrypt (with PubKey) >> encode to Base64 >> transmit
Reconstruct secret key: receive >> decode from Base64 >> decrypt (with PrivKey) >> deserialize >> secretKey
Definition at line 50 of file AsymmetricCipher.java.
crypto.AsymmetricCipher.AsymmetricCipher | ( | ) |
Generates a pair of keys and serializes public key as Base64 string.
Definition at line 112 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.destruct(), crypto.AsymmetricCipher.exportPublicKey(), crypto.AsymmetricCipher.generateKeyPair(), crypto.AsymmetricCipher.instantiateCipher(), crypto.AsymmetricCipher.isActive(), crypto.AsymmetricCipher.loadSavedKeyPair(), crypto.AsymmetricCipher.sanityCheck(), crypto.AsymmetricCipher.saveKeyPair(), and crypto.AsymmetricCipher.serializePublicKey().
{ boolean loadedKeys = loadSavedKeyPair (); boolean sanity = false; while( true ) { if ( ! loadedKeys ) { generateKeyPair (); } instantiateCipher (); serializePublicKey (); if ( ! isActive () ) { destruct (); // make sure everyting is clean if ( loadedKeys ) { Log.warn( "Load key pair inactive; Generating new key pair..." ); continue; } else { Log.error( "AsymmetricCipher: Generated key pair inactive." ); return; } } sanity = sanityCheck (); if ( sanity ) { break; // everything is ok } if ( loadedKeys ) { Log.warn( "Sanity check failed on loaded key pair: Retrying..." ); loadedKeys = false; } else { Log.error( "AsymmetricCipher: Sanity check failed on generated key pair." ); destruct (); return; } } /* Save the key pair (if the key pair is generated i.e. not loaded) */ if ( isActive () && sanity && ! loadedKeys ) { saveKeyPair (); exportPublicKey( null ); } }
byte [] crypto.AsymmetricCipher.decrypt | ( | byte[] | cipherText ) |
Decrypts cipher text using the private key.
Emulates CBC (cipher-block chaining) using plain ECB. Why? -- Because JCE does not support RSA/CBC cipher (only RSA/ECB).
See Cipher-block chaining (CBC)
Definition at line 512 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.cipher, and crypto.AsymmetricCipher.privateKey.
Referenced by crypto.AsymmetricCipher.deserializeEncryptedSecretKey(), and crypto.AsymmetricCipher.sanityCheck().
{ if ( this.cipher == null ) { return null; } byte[] output = null; synchronized( this.cipher ) { try { this.cipher.init( Cipher.DECRYPT_MODE, privateKey ); int blockSize = cipher.getOutputSize( 1 ); byte[] xorBlock = new byte[ blockSize ]; ByteArrayOutputStream bOut = new ByteArrayOutputStream (); for ( int pos = 0; pos < cipherText.length; pos += blockSize ) { int len = Math.min( cipherText.length - pos, blockSize ); byte[] plainBlock = this.cipher.doFinal( cipherText, pos, len ); for ( int i = 0; i < plainBlock.length; ++i ) { plainBlock[i] = (byte)( plainBlock[i] ^ xorBlock[i] ); } bOut.write( plainBlock ); System.arraycopy( cipherText, pos, xorBlock, 0, blockSize ); } output = bOut.toByteArray (); } catch( Exception e ) { Log.exception( Log.ERROR, e ); } } return output; }
SymmetricCipher crypto.AsymmetricCipher.deserializeEncryptedSecretKey | ( | String | serializedSecretKey ) |
Reconstructs secret key from Base64 respresentation of encrypted (using our public key) serialized secret key.
Definition at line 598 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.decrypt(), and crypto.PublicEncryptor.verifyObject().
Referenced by crypto.CipherEngine.deserializeEncryptedSecretKey().
{ SymmetricCipher result = null; ByteArrayInputStream bIn = null; ObjectInputStream oIn = null; try { byte[] cipherText = Base64.decode( serializedSecretKey ); byte[] plainText = decrypt( cipherText ); bIn = new ByteArrayInputStream( plainText ); oIn = new ObjectInputStream( bIn ); Object object = oIn.readObject (); oIn.close (); bIn.close (); String verificator = null; SignedObject signedObject = null; if ( object instanceof SignedObject ) { signedObject = (SignedObject) object; verificator = PublicEncryptor.verifyObject( signedObject ); object = signedObject.getObject (); } if ( object instanceof SecretKey ) { result = new SymmetricCipher( (SecretKey)object, verificator ); } else { Log.error( "Invalid object when trying to deserialize encrypted secret key" ); } } catch( Exception e ) { Log.exception( Log.ERROR, e ); } return result; }
void crypto.AsymmetricCipher.destruct | ( | ) | [private] |
Destructs object (makes it inactive)
Definition at line 164 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.cipher, crypto.AsymmetricCipher.privateKey, crypto.AsymmetricCipher.publicKey, and crypto.AsymmetricCipher.serializedPublicKey.
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ this.privateKey = null; this.publicKey = null; this.cipher = null; this.serializedPublicKey = null; }
void crypto.AsymmetricCipher.exportPublicKey | ( | String | fileName ) |
Save public key into file.
fileName | file where to save public key; if null, it will be the default: AssymmetricCipher.publicKeyFile |
Definition at line 358 of file AsymmetricCipher.java.
References crypto.CipherEngine.getPrivateKeyDirectory(), crypto.AsymmetricCipher.isActive(), crypto.AsymmetricCipher.keyPairComment, crypto.AsymmetricCipher.publicKey, crypto.AsymmetricCipher.publicKeyFile, and crypto.AsymmetricCipher.saveObject().
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ if ( ! isActive () ) { return; } if ( fileName == null ) { fileName = CipherEngine.getPrivateKeyDirectory() + AsymmetricCipher.publicKeyFile; } if ( saveObject( new NamedPublicKey( this.publicKey, this.keyPairComment ), fileName, " " + this.keyPairComment + "\n" ) ) { Log.attn( "Public key exported to '" + fileName + "'" ); } }
void crypto.AsymmetricCipher.generateKeyPair | ( | ) | [private] |
Generates a key pair.
Definition at line 239 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.algorithm, crypto.AsymmetricCipher.keyPairComment, crypto.AsymmetricCipher.keySize, crypto.AsymmetricCipher.privateKey, and crypto.AsymmetricCipher.publicKey.
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ this.privateKey = null; this.publicKey = null; this.keyPairComment = null; try { KeyPairGenerator keyGen = KeyPairGenerator.getInstance( algorithm ); keyGen.initialize( keySize ); KeyPair keyPair = keyGen.generateKeyPair (); this.privateKey = keyPair.getPrivate (); this.publicKey = keyPair.getPublic (); /* Default comment is name of the cipher plus time-stamp */ Calendar cal = Calendar.getInstance (); SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd-HHmmssSSS" ); this.keyPairComment = algorithm.toLowerCase () + "-key-" + sdf.format( cal.getTime() ); Log.attn( "Generated a new " + algorithm + "/" + keySize + " key pair: '" + this.keyPairComment + "'" ); } catch( NoSuchAlgorithmException e ) { StringBuffer algos = new StringBuffer( "Available algorithms:" ); for( String s : Security.getAlgorithms( "Cipher" ) ) { algos.append( " " ).append( s ); } Log.exception( Log.ERROR, e ); Log.warn( algos.toString () ); } }
String crypto.AsymmetricCipher.getNamedPublicKey | ( | ) |
Returns serializable named publicKey (with comment) encoded as Base64.
Definition at line 381 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.keyPairComment, and crypto.AsymmetricCipher.publicKey.
Referenced by crypto.CipherEngine.getNamedPublicKey().
{ StringBuffer sb = new StringBuffer (); try { String encodedKey = Base64.encodeObject( new NamedPublicKey( this.publicKey, this.keyPairComment ), Base64.GZIP ); sb.append( encodedKey ); sb.append( " " ); sb.append( this.keyPairComment ); } catch( IOException e ) { Log.exception( Log.ERROR, e ); } return sb.toString (); }
String crypto.AsymmetricCipher.getSerializedAndSignedPublicKey | ( | ) |
Returns serialized public key used for encryption of datagrams as Base64 string.
Definition at line 347 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.serializedPublicKey.
Referenced by crypto.CipherEngine.getSignedPublicKey().
{ return this.serializedPublicKey; }
void crypto.AsymmetricCipher.instantiateCipher | ( | ) | [private] |
Instantiates a cipher.
Definition at line 280 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.algorithm, crypto.AsymmetricCipher.cipher, crypto.AsymmetricCipher.padding, crypto.AsymmetricCipher.privateKey, and crypto.AsymmetricCipher.publicKey.
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ this.cipher = null; if ( this.privateKey == null || this.publicKey == null ) { return; // must have key pair } try { this.cipher = Cipher.getInstance( algorithm + padding ); Log.trace( "Instantiated asymmetric cipher: " + this.cipher.getAlgorithm () ); } catch( NoSuchAlgorithmException e ) { StringBuffer algos = new StringBuffer( "Available algorithms:" ); for( String s : Security.getAlgorithms( "Cipher" ) ) { algos.append( " " ).append( s ); } Log.exception( Log.ERROR, e ); Log.warn( algos.toString () ); } catch( NoSuchPaddingException e ) { Log.exception( Log.ERROR, e ); } }
boolean crypto.AsymmetricCipher.isActive | ( | ) |
Returns if cipher is properly initialized.
Definition at line 338 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.cipher, and crypto.AsymmetricCipher.serializedPublicKey.
Referenced by crypto.AsymmetricCipher.AsymmetricCipher(), crypto.AsymmetricCipher.exportPublicKey(), and crypto.AsymmetricCipher.saveKeyPair().
{ return this.cipher != null && this.serializedPublicKey != null; }
static Object crypto.AsymmetricCipher.loadObject | ( | String | fileName ) | [static] |
Loads serializable object encoded in Base64 from file.
Definition at line 437 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.loadSavedKeyPair().
{ Object object = null; try { StringBuffer sb = new StringBuffer (); BufferedReader in = new BufferedReader( new FileReader( fileName ) ); String line; while( ( line = in.readLine () ) != null ) { sb.append( line ); } in.close (); object = Base64.decodeToObject( sb.toString () ); } catch( FileNotFoundException e ) { Log.exception( Log.TRACE, e ); } catch( IOException e ) { Log.exception( Log.WARN, e ); } catch( ClassNotFoundException e ) { Log.exception( Log.ERROR, e ); } return object; }
boolean crypto.AsymmetricCipher.loadSavedKeyPair | ( | ) | [private] |
Load saved key pair.
Definition at line 175 of file AsymmetricCipher.java.
References crypto.NamedKeyPair.comment, crypto.CipherEngine.getPrivateKeyDirectory(), crypto.AsymmetricCipher.keyPairComment, crypto.AsymmetricCipher.loadObject(), crypto.NamedKeyPair.privateKey, crypto.AsymmetricCipher.privateKey, crypto.AsymmetricCipher.privateKeyFile, crypto.NamedKeyPair.publicKey, and crypto.AsymmetricCipher.publicKey.
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ this.privateKey = null; this.publicKey = null; String keyFilePath = CipherEngine.getPrivateKeyDirectory() + AsymmetricCipher.privateKeyFile; Object oPair = loadObject( keyFilePath ); if ( oPair != null && ( oPair instanceof NamedKeyPair ) ) { NamedKeyPair keyPair = (NamedKeyPair) oPair; this.privateKey = keyPair.privateKey; this.publicKey = keyPair.publicKey; this.keyPairComment = keyPair.comment; Log.attn( "Loaded private key '" + this.keyPairComment + "' from file '" + AsymmetricCipher.privateKeyFile + "'" ); } return ( this.privateKey != null && this.publicKey != null ); }
boolean crypto.AsymmetricCipher.sanityCheck | ( | ) | [private] |
Sanity check whether PublicEncryptor works with PrivateEncryption.
Definition at line 472 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.decrypt(), crypto.PublicEncryptor.encrypt(), and crypto.AsymmetricCipher.serializedPublicKey.
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ /* Random data */ byte[] plainText = new byte[ 2048 ]; for ( int i = 0; i < plainText.length; ++i ) { plainText[i] = (byte)( Math.random() * 256 ); } /* Simulate encryption at remote end and local decryption */ PublicEncryptor testPublic = new PublicEncryptor( this.serializedPublicKey, null ); byte[] cipherText = testPublic.encrypt( plainText ); byte[] output = this.decrypt( cipherText ); if ( ! java.util.Arrays.equals( plainText, output ) ) { Log.error( "Public encryption / private decryption sanity check failed." ); Log.trace( Log.toHex( plainText ) ); Log.trace( Log.toHex( cipherText ) ); Log.trace( Log.toHex( output ) ); return false; } return true; }
void crypto.AsymmetricCipher.saveKeyPair | ( | ) | [private] |
Saves private/public key pair with description (this.keyPairComment)
Definition at line 202 of file AsymmetricCipher.java.
References crypto.CipherEngine.getPrivateKeyDirectory(), crypto.AsymmetricCipher.isActive(), crypto.AsymmetricCipher.keyPairComment, crypto.AsymmetricCipher.privateKey, crypto.AsymmetricCipher.privateKeyFile, crypto.AsymmetricCipher.publicKey, and crypto.AsymmetricCipher.saveObject().
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ if ( ! isActive () ) { return; } String keyFilePath = CipherEngine.getPrivateKeyDirectory() + AsymmetricCipher.privateKeyFile; if ( saveObject( new NamedKeyPair( this.publicKey, this.privateKey, this.keyPairComment ), keyFilePath, null ) ) { Log.attn( "Private key saved as '" + keyFilePath + "'" ); /* Change file permissions using native OS 'chmod' command (ignoring Windows), * so that no one but the owner might read its contents. */ String osName = System.getProperty( "os.name" ).toLowerCase(); if ( ! osName.matches( "^.*windows.*$" ) ) { try { Runtime.getRuntime().exec( new String[] { "chmod", "400", keyFilePath } ); } catch( IOException e ) { Log.trace( "Failed to do chmod; OS = " + osName ); Log.exception( Log.TRACE, e ); } } } }
static boolean crypto.AsymmetricCipher.saveObject | ( | Serializable | object, |
String | fileName, | ||
String | comment | ||
) | [static] |
Saves serializable object encoded in Base64 to file.
Definition at line 404 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.exportPublicKey(), and crypto.AsymmetricCipher.saveKeyPair().
{ boolean result = false; try { String text = Base64.encodeObject( object, Base64.GZIP ); BufferedWriter out = new BufferedWriter( new FileWriter( fileName ) ); out.write( text ); if ( comment != null ) { out.write( comment ); } out.flush (); out.close (); Log.trace( "Saved " + object.getClass().toString () + " into " + fileName ); result = true; } catch( IOException e ) { Log.exception( Log.ERROR, e ); } return result; }
void crypto.AsymmetricCipher.serializePublicKey | ( | ) | [private] |
Serializes the public key, signs it and encodes in Base64 format.
Definition at line 314 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.cipher, crypto.AsymmetricCipher.privateKey, crypto.AsymmetricCipher.publicKey, crypto.AsymmetricCipher.serializedPublicKey, and crypto.AsymmetricCipher.signObject().
Referenced by crypto.AsymmetricCipher.AsymmetricCipher().
{ if ( this.privateKey == null || this.publicKey == null || this.cipher == null ) { return; // must have key pair and cipher } try { SignedObject signedPublicKey = this.signObject( this.publicKey ); this.serializedPublicKey = Base64.encodeObject( signedPublicKey, Base64.GZIP ); Log.trace( "Serialized Public Key in Base64; length = " + this.serializedPublicKey.length () ); } catch( IOException e ) { Log.exception( Log.ERROR, e ); } }
SignedObject crypto.AsymmetricCipher.signObject | ( | Serializable | object ) |
Signs object using private key.
Definition at line 561 of file AsymmetricCipher.java.
References crypto.AsymmetricCipher.digest, and crypto.AsymmetricCipher.privateKey.
Referenced by crypto.CipherEngine.getSignedSecretKey(), and crypto.AsymmetricCipher.serializePublicKey().
{ String signatureAlgorithm = digest + "with" + this.privateKey.getAlgorithm (); Signature signature = null; SignedObject result = null; try { signature = Signature.getInstance( signatureAlgorithm ); signature.initSign( this.privateKey ); result = new SignedObject( object, this.privateKey, signature ); } catch( NoSuchAlgorithmException e ) { Log.exception( Log.ERROR, e ); } catch( InvalidKeyException e ) { Log.exception( Log.ERROR, e ); } catch( SignatureException e ) { Log.exception( Log.ERROR, e ); } catch( IOException e ) { Log.exception( Log.ERROR, e ); } return result; }
final String crypto.AsymmetricCipher.algorithm = "RSA" [static, private] |
Asymmetric cipher algorithm.
Definition at line 55 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.generateKeyPair(), and crypto.AsymmetricCipher.instantiateCipher().
Cipher crypto.AsymmetricCipher.cipher = null [private] |
Instance of the decrypting engine based on our private key.
Definition at line 102 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.decrypt(), crypto.AsymmetricCipher.destruct(), crypto.AsymmetricCipher.instantiateCipher(), crypto.AsymmetricCipher.isActive(), and crypto.AsymmetricCipher.serializePublicKey().
final String crypto.AsymmetricCipher.digest = "SHA1" [static, private] |
Message digest used for creating/validating signatures.
Definition at line 72 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.signObject().
String crypto.AsymmetricCipher.keyPairComment = null [private] |
The comment (description) of the key pair.
Definition at line 97 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.exportPublicKey(), crypto.AsymmetricCipher.generateKeyPair(), crypto.AsymmetricCipher.getNamedPublicKey(), crypto.AsymmetricCipher.loadSavedKeyPair(), and crypto.AsymmetricCipher.saveKeyPair().
final int crypto.AsymmetricCipher.keySize = 1024 [static, private] |
Default key size for algorithm.
Definition at line 60 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.generateKeyPair().
final String crypto.AsymmetricCipher.padding = "/ECB/PKCS1PADDING" [static, private] |
Padding to be used when ciphering/deciphering.
JCE does not support RSA/CBC so the CBC mode is built on the top of ECB in AsymmetricCipher.decrypt().
Definition at line 67 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.instantiateCipher().
PrivateKey crypto.AsymmetricCipher.privateKey = null [private] |
Private key used for deciphering and signing messages.
Definition at line 87 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.decrypt(), crypto.AsymmetricCipher.destruct(), crypto.AsymmetricCipher.generateKeyPair(), crypto.AsymmetricCipher.instantiateCipher(), crypto.AsymmetricCipher.loadSavedKeyPair(), crypto.AsymmetricCipher.saveKeyPair(), crypto.AsymmetricCipher.serializePublicKey(), and crypto.AsymmetricCipher.signObject().
final String crypto.AsymmetricCipher.privateKeyFile = "mykf-private-key.txt" [static, private] |
The name of the file holding saved private key.
Definition at line 77 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.loadSavedKeyPair(), and crypto.AsymmetricCipher.saveKeyPair().
PublicKey crypto.AsymmetricCipher.publicKey = null [private] |
Public key corresponding to our private key.
Definition at line 92 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.destruct(), crypto.AsymmetricCipher.exportPublicKey(), crypto.AsymmetricCipher.generateKeyPair(), crypto.AsymmetricCipher.getNamedPublicKey(), crypto.AsymmetricCipher.instantiateCipher(), crypto.AsymmetricCipher.loadSavedKeyPair(), crypto.AsymmetricCipher.saveKeyPair(), and crypto.AsymmetricCipher.serializePublicKey().
final String crypto.AsymmetricCipher.publicKeyFile = "mykf-public-key.txt" [static, private] |
The name of the file holding saved public key.
Definition at line 82 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.exportPublicKey().
String crypto.AsymmetricCipher.serializedPublicKey = null [private] |
Our public key: serialized and encoded as Base64 string.
Definition at line 107 of file AsymmetricCipher.java.
Referenced by crypto.AsymmetricCipher.destruct(), crypto.AsymmetricCipher.getSerializedAndSignedPublicKey(), crypto.AsymmetricCipher.isActive(), crypto.AsymmetricCipher.sanityCheck(), and crypto.AsymmetricCipher.serializePublicKey().