private static byte[] GetSecretKey(EcKeyPair privateKey, EllipticCurveEncryptionInformation hybridFileInfo) { var derivedSecret = hybridFileInfo.DerivedSecrets.FirstOrDefault(secret => privateKey.CheckPublicKeyHash(secret.PublicKeyHash, secret.PublicKeyHashSalt)); var ds = EllipticCurveCryptographer.DeriveSecret(privateKey, hybridFileInfo.EphemeralKey); var derivedSecretInputStream = new MemoryStream(derivedSecret.EncryptedSharedSecret); var derivedSecretOutputStream = new MemoryStream(); SymmetricEncryption.Decrypt(derivedSecretInputStream, derivedSecretOutputStream, ds); var secretKey = derivedSecretOutputStream.ToArray(); return(secretKey); }
private static byte[] GetSecretKey(EcIdentifier ecIdentifier, EllipticCurveEncryptionInformation hybridFileInfo, string password) { var publicKey = Encryption.NitroKey.EllipticCurveCryptographer.GetPublicKey(ecIdentifier, password); var derivedSecret = hybridFileInfo.DerivedSecrets.FirstOrDefault(secret => publicKey.CheckPublicKeyHash(secret.PublicKeyHash, secret.PublicKeyHashSalt)); var ds = Encryption.NitroKey.EllipticCurveCryptographer.DeriveSecret(ecIdentifier, hybridFileInfo.EphemeralKey, password); var derivedSecretInputStream = new MemoryStream(derivedSecret.EncryptedSharedSecret); var derivedSecretOutputStream = new MemoryStream(); SymmetricEncryption.Decrypt(derivedSecretInputStream, derivedSecretOutputStream, ds); var secretKey = derivedSecretOutputStream.ToArray(); return(secretKey); }
public static void Encrypt(Stream input, Stream output, EncryptionParameter parameter) { var secretKey = Random.CreateData(SymmetricEncryption.AesKeyLength + SymmetricEncryption.HmacKeyLength); var hybridFileInfo = EllipticCurveEncryptionInformation.Create(parameter.PublicKeys, secretKey); var internalParameter = new EncryptInternalParameter { Filename = parameter.Filename, PasswordDerivationSettings = null, EllipticCurveEncryptionInformation = hybridFileInfo, Progress = parameter.Progress, IsCanceled = parameter.IsCanceled }; SymmetricEncryption.EncryptInternal(input, output, secretKey, internalParameter); }