private AsymmetricKeyParameter GetSenderPublicKey( AsymmetricKeyParameter receiverPrivateKey, OriginatorIdentifierOrKey originator) { OriginatorPublicKey opk = originator.OriginatorPublicKey; if (opk != null) { return(GetPublicKeyFromOriginatorPublicKey(receiverPrivateKey, opk)); } OriginatorID origID = new OriginatorID(); Asn1.Cms.IssuerAndSerialNumber iAndSN = originator.IssuerAndSerialNumber; if (iAndSN != null) { origID.Issuer = iAndSN.Name; origID.SerialNumber = iAndSN.SerialNumber.Value; } else { SubjectKeyIdentifier ski = originator.SubjectKeyIdentifier; origID.SubjectKeyIdentifier = ski.GetKeyIdentifier(); } return(GetPublicKeyFromOriginatorID(origID)); }
private MQVuserKeyingMaterial(Asn1Sequence seq) { this.ephemeralPublicKey = OriginatorPublicKey.GetInstance(seq[0]); if (seq.Count > 1) { this.addedukm = Asn1OctetString.GetInstance((Asn1TaggedObject)seq[1], true); } }
public MQVuserKeyingMaterial( OriginatorPublicKey ephemeralPublicKey, Asn1OctetString addedukm) { // TODO Check ephemeralPublicKey not null this.ephemeralPublicKey = ephemeralPublicKey; this.addedukm = addedukm; }
private AsymmetricKeyParameter GetPublicKeyFromOriginatorPublicKey( AsymmetricKeyParameter receiverPrivateKey, OriginatorPublicKey originatorPublicKey) { PrivateKeyInfo privInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(receiverPrivateKey); SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo( privInfo.PrivateKeyAlgorithm, originatorPublicKey.PublicKey.GetBytes()); return(PublicKeyFactory.CreateKey(pubInfo)); }
private MQVuserKeyingMaterial( Asn1Sequence seq) { // TODO Check seq has either 1 or 2 elements this.ephemeralPublicKey = OriginatorPublicKey.GetInstance(seq[0]); if (seq.Count > 1) { this.addedukm = Asn1OctetString.GetInstance( (Asn1TaggedObject)seq[1], true); } }
private AsymmetricKeyParameter GetSenderPublicKey(AsymmetricKeyParameter receiverPrivateKey, OriginatorIdentifierOrKey originator) { OriginatorPublicKey originatorPublicKey = originator.OriginatorPublicKey; if (originatorPublicKey != null) { return(this.GetPublicKeyFromOriginatorPublicKey(receiverPrivateKey, originatorPublicKey)); } OriginatorID originatorID = new OriginatorID(); Org.BouncyCastle.Asn1.Cms.IssuerAndSerialNumber issuerAndSerialNumber = originator.IssuerAndSerialNumber; if (issuerAndSerialNumber != null) { originatorID.Issuer = issuerAndSerialNumber.Name; originatorID.SerialNumber = issuerAndSerialNumber.SerialNumber.Value; } else { SubjectKeyIdentifier subjectKeyIdentifier = originator.SubjectKeyIdentifier; originatorID.SubjectKeyIdentifier = subjectKeyIdentifier.GetKeyIdentifier(); } return(this.GetPublicKeyFromOriginatorID(originatorID)); }
/** * decrypt the content and return an input stream. */ public override CmsTypedStream GetContentStream( // Key key) ICipherParameters key) { if (!(key is AsymmetricKeyParameter)) { throw new ArgumentException("KeyAgreement requires asymmetric key", "key"); } AsymmetricKeyParameter privKey = (AsymmetricKeyParameter)key; if (!privKey.IsPrivate) { throw new ArgumentException("Expected private key", "key"); } try { OriginatorPublicKey origK = _info.Originator.OriginatorKey; PrivateKeyInfo privInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privKey); SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo(privInfo.AlgorithmID, origK.PublicKey.GetBytes()); AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(pubInfo); string wrapAlg = DerObjectIdentifier.GetInstance( Asn1Sequence.GetInstance(_keyEncAlg.Parameters)[0]).Id; IBasicAgreement agreement = AgreementUtilities.GetBasicAgreementWithKdf( _keyEncAlg.ObjectID, wrapAlg); agreement.Init(privKey); BigInteger wKeyNum = agreement.CalculateAgreement(pubKey); // TODO Fix the way bytes are derived from the secret byte[] wKeyBytes = wKeyNum.ToByteArrayUnsigned(); KeyParameter wKey = ParameterUtilities.CreateKeyParameter(wrapAlg, wKeyBytes); IWrapper keyCipher = WrapperUtilities.GetWrapper(wrapAlg); keyCipher.Init(false, wKey); AlgorithmIdentifier aid = _encAlg; string alg = aid.ObjectID.Id; byte[] encryptedKey = _encryptedKey.GetOctets(); byte[] sKeyBytes = keyCipher.Unwrap(encryptedKey, 0, encryptedKey.Length); KeyParameter sKey = ParameterUtilities.CreateKeyParameter(alg, sKeyBytes); return(GetContentFromSessionKey(sKey)); } catch (SecurityUtilityException e) { throw new CmsException("couldn't create cipher.", e); } catch (InvalidKeyException e) { throw new CmsException("key invalid in message.", e); } catch (Exception e) { throw new CmsException("originator key invalid.", e); } }
public MQVuserKeyingMaterial(OriginatorPublicKey ephemeralPublicKey, Asn1OctetString addedukm) { this.ephemeralPublicKey = ephemeralPublicKey; this.addedukm = addedukm; }
public OriginatorIdentifierOrKey(OriginatorPublicKey id) { this.id = new DerTaggedObject(explicitly: false, 1, id); }