refactor as extensions
This commit is contained in:
87
fido2/extensions/wallet.h
Normal file
87
fido2/extensions/wallet.h
Normal file
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* wallet.h
|
||||
*
|
||||
* Created on: Jul 7, 2018
|
||||
* Author: conor
|
||||
*/
|
||||
|
||||
#ifndef WALLET_H_
|
||||
#define WALLET_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define WALLET_MAX_BUFFER (32 + 255)
|
||||
|
||||
// Sign request
|
||||
// op: 0x10
|
||||
// authType: 0x00 //sign?
|
||||
// reserved: 0x00 // mbedtls signature alg identifier
|
||||
// pinAuth: data[16]
|
||||
// challenge-length: 1-255
|
||||
// challenge: data[1-255]
|
||||
// keyID-length: 1-255
|
||||
// keyID: data[1-255]
|
||||
|
||||
// Resp: normal U2F auth response
|
||||
|
||||
// Register request
|
||||
// op: 0x11
|
||||
// formatType: 0x00 //sign? [0x00: WIF, 0x01: raw]
|
||||
// keyType: 0x03 // mbedtls signature alg identifier
|
||||
// key-length: 1-255
|
||||
// key: data[1-255]
|
||||
|
||||
|
||||
// Resp: modded U2F auth response
|
||||
|
||||
// PIN request
|
||||
// op: 0x12
|
||||
// subcmd: 0x00 // Same as CTAP pin subcommands
|
||||
// reserved: 0x03 // mbedtls signature alg identifier
|
||||
// publickey: data[64]
|
||||
// OR
|
||||
// pinAuth data[64]
|
||||
// OR
|
||||
// pinHashEnc data[64]
|
||||
// OR
|
||||
// newPinEnc data[64]
|
||||
|
||||
// key: data[1-255]
|
||||
// keyID-length: 1-255
|
||||
// keyID: data[1-255]
|
||||
|
||||
// Resp: modded U2F auth response
|
||||
// Returns public key OR pinAuth
|
||||
|
||||
// Only response to this challenge to prevent interference
|
||||
#define WALLET_TAG "\x8C\x27\x90\xf6"
|
||||
|
||||
#define WALLET_MIN_LENGTH (4 + 4 + 16)
|
||||
|
||||
#define WALLET_VERSION "WALLET_V1.0"
|
||||
|
||||
#define MAX_CHALLENGE_SIZE 229
|
||||
#define MAX_KEYID_SIZE 228
|
||||
|
||||
#define MAX_PAYLOAD_SIZE (255 - 16 - 4 - 4)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t operation;
|
||||
uint8_t p1;
|
||||
uint8_t p2;
|
||||
uint8_t numArgs;
|
||||
uint8_t tag[4];
|
||||
uint8_t pinAuth[16];
|
||||
uint8_t payload[MAX_PAYLOAD_SIZE];
|
||||
}__attribute__((packed)) wallet_request;
|
||||
|
||||
|
||||
int16_t bridge_u2f_to_wallet(uint8_t * chal, uint8_t * appid, uint8_t klen, uint8_t * keyh);
|
||||
|
||||
// return 1 if request is a wallet request
|
||||
int is_wallet_device(uint8_t * req, int len);
|
||||
|
||||
void wallet_init();
|
||||
|
||||
#endif /* WALLET_H_ */
|
Reference in New Issue
Block a user