public bool IsPassValid(byte[] pass) { if (OnlyPublic) { throw new ArgumentException( this.MyNameOfProperty(e => e.OnlyPublic) ); } try { if (SignType != (int)ELightCertificateSignType.None) { PrivateSignParameters.GetOriginData(pass); } if (EncryptType != (int)ELightCertificateEncryptType.None) { PrivateEncryptParameters.GetOriginData(pass); } return(true); } catch { return(false); } }
public void ChangePass(byte[] oldPass, byte[] newPass) { if (oldPass == null || oldPass.Length == 0) { throw new ArgumentNullException( MyNameof.GetLocalVarName(() => oldPass) ); } if (newPass == null || newPass.Length == 0) { throw new ArgumentNullException( MyNameof.GetLocalVarName(() => newPass) ); } if (OnlyPublic) { throw new InvalidOperationException( this.MyNameOfProperty(e => e.OnlyPublic) ); } if (!IsPassValid(oldPass)) { throw new ArgumentException( MyNameof.GetLocalVarName(() => oldPass) ); } if (SignType != (int)ELightCertificateSignType.None) { var curSignPrivateData = PrivateSignParameters.GetOriginData( oldPass ); PrivateSignParameters = new PassEncryptedData( curSignPrivateData, (EPrivateKeysKeyDerivationFunction) PrivateSignParameters.KeyDerivationFunctionType, newPass ); } if (EncryptType != (int)ELightCertificateEncryptType.None) { var curEncryptPrivateData = PrivateEncryptParameters.GetOriginData( oldPass ); PrivateEncryptParameters = new PassEncryptedData( curEncryptPrivateData, (EPrivateKeysKeyDerivationFunction) PrivateEncryptParameters.KeyDerivationFunctionType, newPass ); } }
public byte[] DecryptData( byte[] encryptedData, byte[] pass ) { if (encryptedData == null) { throw new ArgumentNullException( MyNameof.GetLocalVarName(() => encryptedData) ); } if (encryptedData.Length == 0) { throw new ArgumentOutOfRangeException( "encryptedData.Length == 0" ); } if (pass == null) { throw new ArgumentNullException( MyNameof.GetLocalVarName(() => pass) ); } if ( EncryptType == (int)ELightCertificateEncryptType.Rsa ) { var privateRsaParameters = ReadRsaParameters( PrivateEncryptParameters.GetOriginData( pass ), true ); using (var csp = GetRsaCsp()) { csp.ImportParameters(privateRsaParameters); return(csp.Decrypt(encryptedData, true)); } } throw new ArgumentOutOfRangeException( this.MyNameOfProperty(e => e.EncryptType) ); }
/**/ if (readPrivate) { result.P = reader.ReadBytesOrThrow(reader.ReadInt32()); result.Q = reader.ReadBytesOrThrow(reader.ReadInt32()); result.DP = reader.ReadBytesOrThrow(reader.ReadInt32()); result.DQ = reader.ReadBytesOrThrow(reader.ReadInt32()); result.InverseQ = reader.ReadBytesOrThrow(reader.ReadInt32()); result.D = reader.ReadBytesOrThrow(reader.ReadInt32()); } } //_rng.GetBytes(ms.GetBuffer()); } return(result); } private static readonly LittleEndianBitConverter _littleConverter = new LittleEndianBitConverter(); /**/ public void CheckMe( bool checkPrivateKeys = false, byte[] privateKeysPass = null ) { if (OnlyPublic && checkPrivateKeys) { throw new ArgumentException( MyNameof.GetLocalVarName(() => checkPrivateKeys) ); } if (Id == Guid.Empty) { throw new ArgumentException( this.MyNameOfProperty(e => e.Id) ); } if (AdditionalData == null) { throw new ArgumentNullException( this.MyNameOfProperty(e => e.AdditionalData) ); } if (Signatures == null) { throw new ArgumentNullException( this.MyNameOfProperty(e => e.Signatures) ); } if ( checkPrivateKeys && privateKeysPass == null ) { throw new ArgumentNullException( MyNameof.GetLocalVarName(() => privateKeysPass) ); } if (SignType != (int)ELightCertificateSignType.None) { if (SignType == (int)ELightCertificateSignType.Rsa) { if (SignKeySize <= 0) { throw new ArgumentOutOfRangeException( this.MyNameOfProperty(e => e.SignKeySize) ); } if ( PublicSignParameters == null ) { throw new ArgumentNullException( this.MyNameOfProperty(e => e.PublicSignParameters) ); } var publicRsaParameters = ReadRsaParameters( PublicSignParameters, false ); using (var csp = GetRsaCsp()) { csp.ImportParameters( publicRsaParameters ); if (csp.KeySize != SignKeySize) { throw new ArgumentException( this.MyNameOfProperty(e => e.PublicSignParameters) ); } } if (checkPrivateKeys) { if (PrivateSignParameters == null) { throw new ArgumentNullException( this.MyNameOfProperty(e => e.PrivateSignParameters) ); } PrivateSignParameters.CheckMe(); var privateRsaParameters = ReadRsaParameters( PrivateSignParameters.GetOriginData( privateKeysPass ), true ); if ( !privateRsaParameters.Exponent.SequenceEqual( publicRsaParameters.Exponent ) || !privateRsaParameters.Modulus.SequenceEqual( publicRsaParameters.Modulus ) ) { throw new ArgumentException( this.MyNameOfProperty(e => e.PrivateSignParameters) ); } using (var csp = GetRsaCsp()) { csp.ImportParameters( privateRsaParameters ); if (csp.KeySize != SignKeySize) { throw new ArgumentException( this.MyNameOfProperty(e => e.PrivateSignParameters) ); } } } } else { throw new ArgumentOutOfRangeException( this.MyNameOfProperty(e => e.SignType) ); } } if (EncryptType != (int)ELightCertificateEncryptType.None) { if (EncryptType == (int)ELightCertificateEncryptType.Rsa) { if (EncryptKeySize <= 0) { throw new ArgumentOutOfRangeException( this.MyNameOfProperty(e => e.EncryptKeySize) ); } if ( PublicEncryptParameters == null ) { throw new ArgumentNullException( this.MyNameOfProperty(e => e.PublicEncryptParameters) ); } var publicRsaParameters = ReadRsaParameters( PublicEncryptParameters, false ); using (var csp = GetRsaCsp()) { csp.ImportParameters( publicRsaParameters ); if (csp.KeySize != SignKeySize) { throw new ArgumentException( this.MyNameOfProperty(e => e.PublicEncryptParameters) ); } } if (checkPrivateKeys) { if (PrivateEncryptParameters == null) { throw new ArgumentNullException( this.MyNameOfProperty(e => e.PrivateEncryptParameters) ); } PrivateEncryptParameters.CheckMe(); var privateRsaParameters = ReadRsaParameters( PrivateEncryptParameters.GetOriginData( privateKeysPass ), true ); if ( !privateRsaParameters.Exponent.SequenceEqual( publicRsaParameters.Exponent ) || !privateRsaParameters.Modulus.SequenceEqual( publicRsaParameters.Modulus ) ) { throw new ArgumentException( this.MyNameOfProperty(e => e.PrivateEncryptParameters) ); } using (var csp = GetRsaCsp()) { csp.ImportParameters( privateRsaParameters ); if (csp.KeySize != SignKeySize) { throw new ArgumentException( this.MyNameOfProperty(e => e.PrivateEncryptParameters) ); } } } } else { throw new ArgumentOutOfRangeException( this.MyNameOfProperty(e => e.EncryptType) ); } } if (Signatures.Any(_ => _.SignerCertificateId == this.Id)) { Assert.True( LightCertificatesHelper.CheckCertificateSignature( this, this ) ); } }