Пример #1
0
        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;
		}
        public MQVuserKeyingMaterial(
            OriginatorPublicKey ephemeralPublicKey,
            Asn1OctetString addedukm)
        {
            // TODO Check ephemeralPublicKey not null

            this.ephemeralPublicKey = ephemeralPublicKey;
            this.addedukm           = addedukm;
        }
Пример #5
0
        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;
 }
Пример #10
0
 public OriginatorIdentifierOrKey(OriginatorPublicKey id)
 {
     this.id = new DerTaggedObject(explicitly: false, 1, id);
 }