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); }
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); }
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); }
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); }