示例#1
0
        public CertificateRequestMessageBuilder SetProofOfPossessionSubsequentMessage(SubsequentMessage msg)
        {
            if (_popoPrivKey != null || _popRaVerified != null || _agreeMac != null)
            {
                throw new InvalidOperationException("only one proof of possession is allowed.");
            }

            this._popoType    = ProofOfPossession.TYPE_KEY_ENCIPHERMENT;
            this._popoPrivKey = new PopoPrivKey(msg);

            return(this);
        }
        public CertificateRequestMessageBuilder SetProofOfPossessionSubsequentMessage(int type, SubsequentMessage msg)
        {
            if (_popoPrivKey != null || _popRaVerified != null || _agreeMac != null)
            {
                throw new InvalidOperationException("only one proof of possession is allowed.");
            }

            if (type != ProofOfPossession.TYPE_KEY_ENCIPHERMENT && type != ProofOfPossession.TYPE_KEY_AGREEMENT)
            {
                throw new ArgumentException("type must be ProofOfPossession.TYPE_KEY_ENCIPHERMENT || ProofOfPossession.TYPE_KEY_AGREEMENT");
            }

            this._popoType    = type;
            this._popoPrivKey = new PopoPrivKey(msg);
            return(this);
        }
    private ProofOfPossession(Asn1TaggedObject tagged)
    {
        tagNo = tagged.TagNo;
        switch (tagNo)
        {
        case 0:
            obj = DerNull.Instance;
            break;

        case 1:
            obj = PopoSigningKey.GetInstance(tagged, isExplicit: false);
            break;

        case 2:
        case 3:
            obj = PopoPrivKey.GetInstance(tagged, isExplicit: false);
            break;

        default:
            throw new ArgumentException("unknown tag: " + tagNo, "tagged");
        }
    }
        public CertificateRequestMessage Build()
        {
            Asn1EncodableVector v = new Asn1EncodableVector();

            v.Add(new DerInteger(this._certReqId));

            if (!this._extGenerator.IsEmpty)
            {
                this._templateBuilder.SetExtensions(_extGenerator.Generate());
            }

            v.Add(_templateBuilder.Build());

            if (_controls.Count > 0)
            {
                Asn1EncodableVector controlV = new Asn1EncodableVector();

                foreach (Object item  in _controls)
                {
                    IControl control = (IControl)item;
                    controlV.Add(new AttributeTypeAndValue(control.Type, control.Value));
                }

                v.Add(new DerSequence(controlV));
            }

            CertRequest request = CertRequest.GetInstance(new DerSequence(v));

            v = new Asn1EncodableVector();

            v.Add(request);

            if (_popSigner != null)
            {
                CertTemplate template = request.CertTemplate;

                if (template.Subject == null || template.PublicKey == null)
                {
                    SubjectPublicKeyInfo pubKeyInfo = request.CertTemplate.PublicKey;

                    ProofOfPossessionSigningKeyBuilder builder = new ProofOfPossessionSigningKeyBuilder(pubKeyInfo);

                    if (_sender != null)
                    {
                        builder.setSender(_sender);
                    }
                    else
                    {
                        // PkMa pkmacGenerator = new PKMACValueGenerator(_pkmacBuilder);

                        builder.setPublicKeyMac(_pkMacBuilder, _password);
                    }

                    v.Add(new ProofOfPossession(builder.build(_popSigner)));
                }
                else
                {
                    ProofOfPossessionSigningKeyBuilder builder = new ProofOfPossessionSigningKeyBuilder(request);

                    v.Add(new ProofOfPossession(builder.build(_popSigner)));
                }
            }
            else if (_popoPrivKey != null)
            {
                v.Add(new ProofOfPossession(_popoType, _popoPrivKey));
            }
            else if (_agreeMac != null)
            {
                v.Add(new ProofOfPossession(ProofOfPossession.TYPE_KEY_AGREEMENT,
                                            PopoPrivKey.GetInstance(new DerTaggedObject(false, PopoPrivKey.agreeMAC, _agreeMac), true)));
            }
            else if (_popRaVerified != null)
            {
                v.Add(new ProofOfPossession());
            }

            return(new CertificateRequestMessage(CertReqMsg.GetInstance(new DerSequence(v))));
        }
 public ProofOfPossession(int type, PopoPrivKey privkey)
 {
     tagNo = type;
     obj   = privkey;
 }