Verifying service produced challenge

This commit is contained in:
Kgothatso 2019-11-26 22:42:57 +02:00
parent 0a17e78fdc
commit 4d16737b23
2 changed files with 55 additions and 40 deletions

View File

@ -28,7 +28,12 @@ module.exports.handler = (argv) => {
persistence().LoadDB() persistence().LoadDB()
.then(db => { .then(db => {
// TODO validate lock definition has all the parameters we need // TODO validate lock definition has all the parameters we need
// TODO: Verify challenge comes from a service we know... // TODO: validate serviceExtendedPublicKey
const verification = cryptoUtil.verifyChallenge(
registerationMessage.serviceExtendedPublicKey,
challenge
);
if(verification) {
return db.ExtendedPublicKey.findOne({ return db.ExtendedPublicKey.findOne({
where: { where: {
xpub: challenge.xpub xpub: challenge.xpub
@ -41,8 +46,9 @@ module.exports.handler = (argv) => {
}).then(extendedPublicKey => { }).then(extendedPublicKey => {
if (extendedPublicKey) { if (extendedPublicKey) {
const encryptedKey = extendedPublicKey.key.encryptedPrivateKey; const encryptedKey = extendedPublicKey.key.encryptedPrivateKey;
const iv = extendedPublicKey.key.iv;
const password = "vanished"; const password = "vanished";
const walletXpriv = cryptoUtil.decrypt(encryptedKey, password); const walletXpriv = cryptoUtil.decrypt(encryptedKey, password, iv);
var challengeDerivationPath = `${extendedPublicKey.derivationPath}/${challenge.derivationPath.split("c/")[1]}`; var challengeDerivationPath = `${extendedPublicKey.derivationPath}/${challenge.derivationPath.split("c/")[1]}`;
@ -53,6 +59,7 @@ module.exports.handler = (argv) => {
return db.Lock.create({ return db.Lock.create({
userIdentifier: registerationMessage.userIdentifier, userIdentifier: registerationMessage.userIdentifier,
url: registerationMessage.url, url: registerationMessage.url,
serviceExtendedPublicKey: registerationMessage.serviceExtendedPublicKey,
signature: signature.toString('hex'), signature: signature.toString('hex'),
message: challenge.message, message: challenge.message,
extendedPublicKeyId: extendedPublicKey.id extendedPublicKeyId: extendedPublicKey.id
@ -70,6 +77,10 @@ module.exports.handler = (argv) => {
} }
}) })
} else {
console.error("Challenge not signed by service");
}
}) })
} }

View File

@ -16,6 +16,10 @@ module.exports = function (sequelize, DataTypes, options) {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false allowNull: false
}, },
serviceExtendedPublicKey: {
type: DataTypes.STRING,
allowNull: false
},
signature: { signature: {
// Derivation from the master key... // Derivation from the master key...
// TODO: Add validation... // TODO: Add validation...