Verifying service produced challenge
This commit is contained in:
parent
0a17e78fdc
commit
4d16737b23
@ -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");
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
@ -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...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user