add extension to solo to get version and RNG
This commit is contained in:
parent
8303bb04d3
commit
eb2d377ffb
@ -1,21 +1,21 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 SoloKeys, Inc. <https://solokeys.com/>
|
* Copyright (C) 2018 SoloKeys, Inc. <https://solokeys.com/>
|
||||||
*
|
*
|
||||||
* This file is part of Solo.
|
* This file is part of Solo.
|
||||||
*
|
*
|
||||||
* Solo is free software: you can redistribute it and/or modify
|
* Solo is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Solo is distributed in the hope that it will be useful,
|
* Solo is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with Solo. If not, see <https://www.gnu.org/licenses/>
|
* along with Solo. If not, see <https://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
* This code is available under licenses for commercial use.
|
* This code is available under licenses for commercial use.
|
||||||
* Please contact SoloKeys for more information.
|
* Please contact SoloKeys for more information.
|
||||||
*/
|
*/
|
||||||
@ -23,6 +23,7 @@
|
|||||||
#include "extensions.h"
|
#include "extensions.h"
|
||||||
#include "u2f.h"
|
#include "u2f.h"
|
||||||
#include "wallet.h"
|
#include "wallet.h"
|
||||||
|
#include "solo.h"
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@ -69,6 +70,8 @@ int16_t bridge_u2f_to_extensions(uint8_t * _chal, uint8_t * _appid, uint8_t klen
|
|||||||
ret = bootloader_bridge(klen, keyh);
|
ret = bootloader_bridge(klen, keyh);
|
||||||
#elif defined(WALLET_EXTENSION)
|
#elif defined(WALLET_EXTENSION)
|
||||||
ret = bridge_u2f_to_wallet(_chal, _appid, klen, keyh);
|
ret = bridge_u2f_to_wallet(_chal, _appid, klen, keyh);
|
||||||
|
#else
|
||||||
|
ret = bridge_u2f_to_solo(_chal, _appid, klen, keyh);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
|
76
fido2/extensions/solo.c
Normal file
76
fido2/extensions/solo.c
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 SoloKeys, Inc. <https://solokeys.com/>
|
||||||
|
*
|
||||||
|
* This file is part of Solo.
|
||||||
|
*
|
||||||
|
* Solo is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Solo is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Solo. If not, see <https://www.gnu.org/licenses/>
|
||||||
|
*
|
||||||
|
* This code is available under licenses for commercial use.
|
||||||
|
* Please contact SoloKeys for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "extensions.h"
|
||||||
|
#include "u2f.h"
|
||||||
|
#include "wallet.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "ctap.h"
|
||||||
|
#include "ctap_errors.h"
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include APP_CONFIG
|
||||||
|
|
||||||
|
int16_t bridge_u2f_to_solo(uint8_t * _chal, uint8_t * _appid, uint8_t klen, uint8_t * keyh)
|
||||||
|
{
|
||||||
|
static uint8_t msg_buf[72];
|
||||||
|
int reqlen = klen;
|
||||||
|
int i;
|
||||||
|
int8_t ret = 0;
|
||||||
|
|
||||||
|
wallet_request * req = (wallet_request *) msg_buf;
|
||||||
|
|
||||||
|
printf1(TAG_WALLET, "u2f-solo [%d]: ", reqlen); dump_hex1(TAG_WALLET, msg_buf, reqlen);
|
||||||
|
|
||||||
|
switch(req->operation)
|
||||||
|
{
|
||||||
|
case WalletVersion:
|
||||||
|
msg_buf[0] = SOLO_VERSION_MAJ;
|
||||||
|
msg_buf[0] = SOLO_VERSION_MIN;
|
||||||
|
u2f_response_writeback((uint8_t*)WALLET_VERSION, sizeof(WALLET_VERSION)-1);
|
||||||
|
break;
|
||||||
|
case WalletRng:
|
||||||
|
printf1(TAG_WALLET,"SoloRng\n");
|
||||||
|
|
||||||
|
ret = ctap_generate_rng(msg_buf, 72);
|
||||||
|
if (ret != 1)
|
||||||
|
{
|
||||||
|
printf1(TAG_WALLET,"Rng failed\n");
|
||||||
|
ret = CTAP2_ERR_PROCESSING;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
u2f_response_writeback((uint8_t *)msg_buf,72);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf2(TAG_ERR,"Invalid wallet command: %x\n",req->operation);
|
||||||
|
ret = CTAP1_ERR_INVALID_COMMAND;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
27
fido2/extensions/solo.h
Normal file
27
fido2/extensions/solo.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 SoloKeys, Inc. <https://solokeys.com/>
|
||||||
|
*
|
||||||
|
* This file is part of Solo.
|
||||||
|
*
|
||||||
|
* Solo is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Solo is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Solo. If not, see <https://www.gnu.org/licenses/>
|
||||||
|
*
|
||||||
|
* This code is available under licenses for commercial use.
|
||||||
|
* Please contact SoloKeys for more information.
|
||||||
|
*/
|
||||||
|
#ifndef SOLO_H_
|
||||||
|
#define SOLO_H_
|
||||||
|
|
||||||
|
int16_t bridge_u2f_to_solo(uint8_t * _chal, uint8_t * _appid, uint8_t klen, uint8_t * keyh);
|
||||||
|
|
||||||
|
#endif
|
@ -13,6 +13,7 @@ SRC += $(wildcard lib/*.c) $(wildcard lib/usbd/*.c)
|
|||||||
SRC += ../../fido2/util.c ../../fido2/u2f.c ../../fido2/test_power.c
|
SRC += ../../fido2/util.c ../../fido2/u2f.c ../../fido2/test_power.c
|
||||||
SRC += ../../fido2/stubs.c ../../fido2/log.c ../../fido2/ctaphid.c ../../fido2/ctap.c
|
SRC += ../../fido2/stubs.c ../../fido2/log.c ../../fido2/ctaphid.c ../../fido2/ctap.c
|
||||||
SRC += ../../fido2/ctap_parse.c ../../fido2/main.c
|
SRC += ../../fido2/ctap_parse.c ../../fido2/main.c
|
||||||
|
SRC += ../../fido2/extensions/extensions.c ../../fido2/extensions/solo.c
|
||||||
|
|
||||||
# Crypto libs
|
# Crypto libs
|
||||||
SRC += ../../crypto/sha256/sha256.c ../../crypto/micro-ecc/uECC.c ../../crypto/tiny-AES-c/aes.c
|
SRC += ../../crypto/sha256/sha256.c ../../crypto/micro-ecc/uECC.c ../../crypto/tiny-AES-c/aes.c
|
||||||
|
Loading…
x
Reference in New Issue
Block a user