Не удается проверить подпись - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь создать подпись для сгенерированного хэша. Прежде чем я сохраню данные в базе данных verifySignature возвращает true, таким образом, все хорошо. Перед тем, как сохранить подпись в БД, я конвертирую ее в JSON, потому что не могу сохранить [Объектный объект]

router.post('/', function(req, res, next) {

  var publicKey = '041e56b61d36fcef7942b671b1e9773bc105d7e5fb831f67d9004ddfb88b64cb522610d8efcebaf445794dc2f722fd53c1de92c3efe7fbb25ac9044715dd3632c8';
  var privateKey = '704bc2b2e8d3f49ea6535498a82c4d09287c5f53acb4ebf1e55aca7e520c3f77';

  var host = req.body.host;
  var value = req.body.value;
  var select = req.body.selectpicker;
  var conncated = host.concat(value,select);
  var message = Hash(conncated);
  var signature = createSignature(message,privateKey);

  var post  = {
    host: host,
    type: select,
    value: value,
    signature: JSON.stringify(signature),
    public : publicKey,
    hash: message
  };

  var query = db.query('INSERT INTO diploma SET ?', post, function(err, result) {

  });

  const isVerified = verifySignature(message, publicKey, signature);
  console.log('> Is verified: ', isVerified); //returns true

  function verifySignature(message, publicAddress, signature) {
    const messageHash = Hash(message);
    const publicKeyPair = ec.keyFromPublic(publicAddress, 'hex'); // use the accessible public key to verify the signature
    const isVerified = publicKeyPair.verify(messageHash, signature);
    return isVerified;
  }

  function createSignature(message, privateKey) {
    const messageHash = Hash(message);
    const privateKeyPair = ec.keyFromPrivate(privateKey);
    const signature = ec.sign(messageHash, privateKeyPair); // generate a signature on the hashed message with the private key
    return signature;
  }

});

Однако, когда я возвращаю данные из базы данных verifySignature возвращает false. У меня есть открытый ключ и хэш, закодированные, чтобы убедиться в отсутствии совпадения кодировки.

router.get('/', function(req, res, next) {
  var searchValue = req.query['hostname'];
  var query = db.query('SELECT value,signature,hash,public FROM diploma WHERE host =  ?', searchValue, function(err, result) {

    var public = '041e56b61d36fcef7942b671b1e9773bc105d7e5fb831f67d9004ddfb88b64cb522610d8efcebaf445794dc2f722fd53c1de92c3efe7fbb25ac9044715dd3632c8';
    var signature = JSON.parse(result[0].signature);
    var hash = '81faaa9f6b615cae3d7d8aa39f2c02ef93f3ae20';

    const isVerified = verify(hash,public,signature);
    console.log('> Is verified: ', isVerified); //returns false

    function verify(hash, publicAddress, signature) {
      const publicKeyPair = ec.keyFromPublic(publicAddress, 'hex'); // use the accessible public key to verify the signature
      const isVerified = publicKeyPair.verify(hash, signature);
      return isVerified;
    }

  });

Что-то не так с сопоставлением mysql, потому что у меня заканчиваются идеи.

1 Ответ

0 голосов
/ 19 марта 2019

Понятия не имею, почему, но мне пришлось проверить функцию, чтобы она следовала, и теперь она работает.

function verify(hash, publicAddress, signature) {
  const messageHash = Hash(hash);
  const publicKeyPair = ec.keyFromPublic(publicAddress, 'hex'); // use the accessible public key to verify the signature
  return publicKeyPair.verify(messageHash, JSON.parse(signature));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...