KRL: Подписание запросов с помощью HMAC_SHA1 - PullRequest
3 голосов
/ 19 мая 2011

Я сделал тестовый набор для математических функций: hmac_ * KRL. Я сравниваю результаты KRL с результатами Python. KRL дает мне разные результаты.

код: https://gist.github.com/980788 результаты: http://ktest.heroku.com/a421x68

Как я могу получить действительные подписи от KRL? Я предполагаю, что результаты Python верны.

ОБНОВЛЕНИЕ: Работает нормально, если только вы не хотите использовать символы новой строки в сообщении. Как подписать строку, содержащую символы новой строки?

1 Ответ

2 голосов
/ 20 мая 2011

Я подозреваю, что ваша библиотека SHA python возвращает кодировку, отличную от ожидаемой библиотекой b64encode.Моя библиотека выполняет и SHA, и base64 за один вызов, поэтому я должен выполнить дополнительную работу для проверки результатов.

Как показано в вашем KRL, правильный синтаксис:
math: hmac_sha1_base64 (raw_string,ключ);
математика: hmac_sha256_base64 (raw_string, ключ);

В них используются те же библиотеки, которые я использую для модуля Amazon, который сейчас тестируется нормально.

Для конкретного тестирования этих подпрограмм я использовал векторы тестирования изRFC ( sha1 , sha256 ).Мы изначально не поддерживаем шестнадцатеричный формат, поэтому я не смог использовать все тестовые векторы, но я смог использовать простой:

HMAC SHA1

test_case = 2
key = "Jefe"
key_len = 4
data = "что ты ни за что не хочешь?"
data_len = 28
digest = 0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79 * 10*

HMAC SHA256

Ключ = 4a656665 ("Jefe")
Данные = 7768617420646f2079612077616e7420666f72206e6f7468696e673f (не хотите?)1036 * HMAC-SHA-256 = 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843

Вот мой код:

global {  
        raw_string = "what do ya want for nothing?";  
        mkey = "Jefe";  
    }

rule first_rule {
        select when pageview ".*" setting ()
        pre {
            hmac_sha1 = math:hmac_sha1_hex(raw_string,mkey);
            hmac_sha1_64 = math:hmac_sha1_base64(raw_string,mkey);
            bhs256c = math:hmac_sha256_hex(raw_string,mkey);
            bhs256c64 = math:hmac_sha256_base64(raw_string,mkey);

        }
        {
        notify("HMAC sha1", "#{hmac_sha1}") with sticky = true;
        notify("hmac sha1 base 64", "#{hmac_sha1_64}") with sticky = true;
            notify("hmac sha256", "#{bhs256c}") with sticky = true;
            notify("hmac sha256 base 64", "#{bhs256c64}") with sticky = true;
        }
}

var hmac_fs6s6646s6f6/ zfauXrL6LSdBbV8YTfnCWafHk ';
var bhs256c =' 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 ';
var bhs256WJWRWR6

Результаты HEX для SHA1 и SHA256 соответствуют векторам теста простого случая.

Я протестировал результаты base64, расшифровав результаты HEX и передав их через кодировщик base64 здесь

Мои результаты были:

7 / zfauXrL6LSdBbV8YTfnCWafHk =
W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTs60 * * 10 * * * * * * * * * * * 1и HMAC SHA256 base64 соответственно.

Если у вас все еще есть проблемы, не могли бы вы предоставить мне base64 и SHA, полученные по отдельности от python, чтобы я мог определить разъединение?

...