1
0
mirror of https://github.com/bitwarden/mobile.git synced 2024-12-03 13:23:30 +01:00

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, AesCbc256_B64 = 0,
AesCbc128_HmacSha256_B64 = 1, AesCbc128_HmacSha256_B64 = 1,
AesCbc256_HmacSha256_B64 = 2, 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]; CipherText = encPieces[1];
Mac = encPieces[2]; Mac = encPieces[2];
break; break;
case EncryptionType.RsaOaep_Sha256_B64: case EncryptionType.Rsa2048_OaepSha256_B64:
case EncryptionType.Rsa2048_OaepSha1_B64:
if(encPieces.Length != 1) if(encPieces.Length != 1)
{ {
throw new ArgumentException("Malformed encPieces."); throw new ArgumentException("Malformed encPieces.");

View File

@ -350,12 +350,19 @@ namespace Bit.App.Services
throw new ArgumentNullException(nameof(privateKey)); 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 cryptoKey = provider.ImportKeyPair(privateKey, CryptographicPrivateKeyBlobType.Pkcs8RawPrivateKeyInfo);
var decryptedBytes = WinRTCrypto.CryptographicEngine.Decrypt(cryptoKey, encyptedValue.CipherTextBytes); var decryptedBytes = WinRTCrypto.CryptographicEngine.Decrypt(cryptoKey, encyptedValue.CipherTextBytes);
return decryptedBytes; return decryptedBytes;