add support for rsa oaep sha1 enc type

This commit is contained in:
Kyle Spearrin 2017-04-21 13:40:29 -04:00
parent 2714c7cce9
commit 1be4f6e20c
3 changed files with 14 additions and 5 deletions

View file

@ -5,6 +5,7 @@
AesCbc256_B64 = 0,
AesCbc128_HmacSha256_B64 = 1,
AesCbc256_HmacSha256_B64 = 2,
RsaOaep_Sha256_B64 = 3
Rsa2048_OaepSha256_B64 = 3,
Rsa2048_OaepSha1_B64 = 4
}
}

View file

@ -55,7 +55,8 @@ namespace Bit.App.Models
CipherText = encPieces[1];
Mac = encPieces[2];
break;
case EncryptionType.RsaOaep_Sha256_B64:
case EncryptionType.Rsa2048_OaepSha256_B64:
case EncryptionType.Rsa2048_OaepSha1_B64:
if(encPieces.Length != 1)
{
throw new ArgumentException("Malformed encPieces.");

View file

@ -350,12 +350,19 @@ namespace Bit.App.Services
throw new ArgumentNullException(nameof(privateKey));
}
if(encyptedValue.EncryptionType != EncryptionType.RsaOaep_Sha256_B64)
IAsymmetricKeyAlgorithmProvider provider = null;
switch(encyptedValue.EncryptionType)
{
throw new ArgumentException("encType unavailable.");
case EncryptionType.Rsa2048_OaepSha256_B64:
provider = WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaOaepSha256);
break;
case EncryptionType.Rsa2048_OaepSha1_B64:
provider = WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaOaepSha1);
break;
default:
throw new ArgumentException("EncryptionType unavailable.");
}
var provider = WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaOaepSha256);
var cryptoKey = provider.ImportKeyPair(privateKey, CryptographicPrivateKeyBlobType.Pkcs8RawPrivateKeyInfo);
var decryptedBytes = WinRTCrypto.CryptographicEngine.Decrypt(cryptoKey, encyptedValue.CipherTextBytes);
return decryptedBytes;