public PowerAuthNonPersonalizedEncryptor(String applicationKeyBase64, String sessionKeyBytesBase64, String sessionIndexBase64, String ephemeralPublicKeyBase64) { byte[] applicationKey = BaseEncoding.base64().decode(applicationKeyBase64); byte[] sessionIndex = BaseEncoding.base64().decode(sessionIndexBase64); byte[] sessionKeyBytes = BaseEncoding.base64().decode(sessionKeyBytesBase64); byte[] ephemeralKeyBytes = BaseEncoding.base64().decode(ephemeralPublicKeyBase64); this.encryptor = new NonPersonalizedEncryptor(applicationKey, sessionKeyBytes, sessionIndex, ephemeralKeyBytes); }
/** * Create a new client side non-personalized encryptor using provided app key (for reference in encrypted object) * and master public key. * * @param appKey App key. * @param masterPublicKey Master Server Public Key. * @throws InvalidKeyException In case an invalid key is provided. * @throws GenericCryptoException In case of any other cryptography error. * @throws CryptoProviderException In case cryptography provider is incorrectly initialized. */ public ClientNonPersonalizedEncryptor(byte[] appKey, PublicKey masterPublicKey) throws InvalidKeyException, GenericCryptoException, CryptoProviderException { final KeyGenerator generator = new KeyGenerator(); byte[] sessionIndex = generator.generateRandomBytes(16); KeyPair ephemeralKeyPair = generator.generateKeyPair(); final SecretKey ephemeralSecretKey = generator.computeSharedKey(ephemeralKeyPair.getPrivate(), masterPublicKey); final SecretKey sessionRelatedSecretKey = generator.deriveSecretKeyHmac(ephemeralSecretKey, sessionIndex); final CryptoProviderUtil keyConversion = PowerAuthConfiguration.INSTANCE.getKeyConvertor(); final byte[] sessionRelatedSecretKeyBytes = keyConversion.convertSharedSecretKeyToBytes(sessionRelatedSecretKey); final byte[] ephemeralPublicKeyBytes = keyConversion.convertPublicKeyToBytes(ephemeralKeyPair.getPublic()); this.encryptor = new NonPersonalizedEncryptor(appKey, sessionRelatedSecretKeyBytes, sessionIndex, ephemeralPublicKeyBytes); }
/** * Create a new client side non-personalized encryptor using provided app key (for reference in encrypted object) * and master public key. * * @param appKey App key. * @param masterPublicKey Master Server Public Key. * @throws InvalidKeyException In case an invalid key is provided. * @throws GenericCryptoException In case of any other cryptography error. * @throws CryptoProviderException In case cryptography provider is incorrectly initialized. */ public ClientNonPersonalizedEncryptor(byte[] appKey, PublicKey masterPublicKey) throws InvalidKeyException, GenericCryptoException, CryptoProviderException { final KeyGenerator generator = new KeyGenerator(); byte[] sessionIndex = generator.generateRandomBytes(16); KeyPair ephemeralKeyPair = generator.generateKeyPair(); final SecretKey ephemeralSecretKey = generator.computeSharedKey(ephemeralKeyPair.getPrivate(), masterPublicKey); final SecretKey sessionRelatedSecretKey = generator.deriveSecretKeyHmac(ephemeralSecretKey, sessionIndex); final CryptoProviderUtil keyConversion = PowerAuthConfiguration.INSTANCE.getKeyConvertor(); final byte[] sessionRelatedSecretKeyBytes = keyConversion.convertSharedSecretKeyToBytes(sessionRelatedSecretKey); final byte[] ephemeralPublicKeyBytes = keyConversion.convertPublicKeyToBytes(ephemeralKeyPair.getPublic()); this.encryptor = new NonPersonalizedEncryptor(appKey, sessionRelatedSecretKeyBytes, sessionIndex, ephemeralPublicKeyBytes); }