Example #1
0
        public async Task <CTAPResponse> SetPIN(DevParam devParam, byte[] pinAuth, byte[] newPinEnc)
        {
            var cbor = CBORObject.NewMap();

            // 0x01:pinProtocol = 1固定
            cbor.Add(0x01, 1);

            // 0x02:subCommand = 0x03:setPIN
            cbor.Add(0x02, 0x03);

            // 0x03:keyAgreement : COSE_Key
            // これは、自分が生成したもの
            {
                var user = CBORObject.NewMap();
                user.Add(1, My_KeyAgreement.Kty);
                user.Add(3, My_KeyAgreement.Alg);
                user.Add(-1, My_KeyAgreement.Crv);
                user.Add(-2, My_KeyAgreement.X);
                user.Add(-3, My_KeyAgreement.Y);
                cbor.Add(0x03, user);
            }

            // 0x04:pinAuth
            cbor.Add(0x04, pinAuth);

            // 0x05:newPinEnc
            cbor.Add(0x05, newPinEnc);

            var resi = await sendCommandandResponse(devParam, 0x06, cbor);

            var response = new CTAPResponse(resi);

            return(response);
        }
Example #2
0
        public async Task <CTAPResponse> GetRetries(DevParam devParam)
        {
            var cbor = CBORObject.NewMap();

            // 0x01:pinProtocol = 1固定
            cbor.Add(0x01, 1);

            // 0x02:subCommand = 0x01:getRetries
            cbor.Add(0x02, 0x01);

            var resi = await sendCommandandResponse(devParam, 0x06, cbor);

            if (resi.ResponseDataCbor != null)
            {
                foreach (var key in resi.ResponseDataCbor.Keys)
                {
                    var keyVal = key.AsByte();
                    if (keyVal == 0x03)
                    {
                        RetryCount = resi.ResponseDataCbor[key].AsUInt16();
                        break;
                    }
                }
            }
            var response = new CTAPResponse(resi);

            return(response);
        }
Example #3
0
        public async Task <CTAPResponse> GetKeyAgreement(DevParam devParam)
        {
            var cbor = CBORObject.NewMap();

            // 0x01:pinProtocol = 1固定
            cbor.Add(0x01, 1);

            // 0x02:subCommand = 0x02:getKeyAgreement
            cbor.Add(0x02, 0x02);

            var resi = await sendCommandandResponse(devParam, 0x06, cbor);

            var response = new CTAPResponse(resi);

            if (resi.ResponseDataCbor != null)
            {
                Authenticator_KeyAgreement = new KeyAgreement(resi.ResponseDataCbor);
            }

            return(response);
        }
Example #4
0
        public async Task <CTAPResponseAttestation> SendAndResponse(DevParam devParam)
        {
            // check
            {
                if (RpId == null)
                {
                    RpId = "";
                }
                if (RpName == null)
                {
                    RpName = "";
                }
                if (UserId == null)
                {
                    UserId = "";
                }
                if (UserName == null)
                {
                    UserName = "";
                }
                if (UserDisplayName == null)
                {
                    UserDisplayName = "";
                }
                if (ClientDataHash == null)
                {
                    ClientDataHash = new byte[0];
                }
            }

            var cbor = CBORObject.NewMap();

            // 0x01 : clientDataHash
            cbor.Add(0x01, ClientDataHash);

            // 0x02 : rp
            cbor.Add(0x02, CBORObject.NewMap().Add("id", RpId).Add("name", RpName));

            // 0x03 : user
            {
                var user = CBORObject.NewMap();
                if (UserId_bytearray != null)
                {
                    user.Add("id", UserId_bytearray);
                }
                else
                {
                    user.Add("id", Encoding.ASCII.GetBytes(UserId));
                }

                if (string.IsNullOrEmpty(UserName))
                {
                    user.Add("name", " ");
                }
                else
                {
                    user.Add("name", UserName);
                }

                if (string.IsNullOrEmpty(UserDisplayName))
                {
                    user.Add("displayName", " ");
                }
                else
                {
                    user.Add("displayName", UserDisplayName);
                }

                cbor.Add(0x03, user);
            }

            // 0x04 : pubKeyCredParams
            {
                var pubKeyCredParams = CBORObject.NewMap();
                pubKeyCredParams.Add("alg", -7);
                pubKeyCredParams.Add("type", "public-key");
                cbor.Add(0x04, CBORObject.NewArray().Add(pubKeyCredParams));
            }

            // 0x07 : options
            {
                var opt = CBORObject.NewMap();
                opt.Add("rk", Option_rk);
                opt.Add("uv", Option_uv);
                cbor.Add(0x07, opt);
            }

            if (PinAuth != null)
            {
                // pinAuth(0x08)
                cbor.Add(0x08, PinAuth);

                // 0x09:pinProtocol
                cbor.Add(0x09, 1);
            }

            var resi = await sendCommandandResponse(devParam, 0x01, cbor, this.TimeoutMs);

            var response = new CTAPResponseAttestation(resi);

            response.CommandDataJson = this.payloadJson;
            return(response);
        }