Не удалось создать подпись oauth 1.0 в c

#c #oauth #openssl #hmacsha1

Вопрос:

Я пытаюсь реализовать проверку oauth 1.0 в C в рамках интеграции LTI. Я пытаюсь проверить свою реализацию на основе примера, приведенного в спецификации. Мой код создает правильную базовую строку подписи (находится в нижней части этого раздела).:

 POSTamp;http://example.com/requestamp;a2=r%20b&a3=2%20q&a3=a&b5=%3D%253D&c%40=&c2=&oauth_consumer_key=9djdj82h48djs9d2&oauth_nonce=7d8f3e4a&oauth_signature_method=HMAC-SHA1&oauth_timestamp=137131201&oauth_token=kkk9d7dh3k39sjv7
 

Пока все идет хорошо. «Самое сложное сделано», — подумал я, но оказалось, что я действовал слишком быстро. Насколько я могу судить, проблемной частью является вычисление hmac_sha1. В разделе 3.1 спецификации секрет клиента и секрет токена считаются j49sk3j29djd и dh893hdasih9 , соответственно. В разделе 3.4.2 хэш вычисляется по указанной выше базовой строке подписи с использованием ключа, состоящего из секрета клиента с кодировкой в процентах, символа амперсанда amp; и секрета токена с кодировкой в процентах , все они объединены. Поскольку секреты не содержат специальных символов, я заключаю, что hmac_sha1 они должны вызываться с помощью ключа j49sk3j29djdamp;dh893hdasih9 . Я использую следующую однострочную строку (на основе openssl) для вычисления контрольной суммы:

 string hmac_sha1(string constamp; text, string constamp; secret) {
    return string((char*)HMAC(EVP_sha1(), (unsigned char const*)secret.c_str(), secret.size(), (unsigned char const*)text.c_str(), text.size(), nullptr, nullptr), 20);
}
 

Эту функцию я проверил с помощью тестовых примеров отсюда. Зовущий

 hmac_sha1(base, "j49sk3j29djdamp;dh893hdasih9")
 

результаты в

 r6/TJjbCOr97/ UU0NsvSne7s5g=   (base64 encoded)
 

в то время как спецификация говорит, что это должно быть

 bYT5CMsGcbgUdFHObYMEfcx6bsw=   (base64 encoded)
 

Поскольку hmac_sha1 и базовая строка подписи проверены, кажется, что ключ должен быть неправильным — или моя логика. Но как? Я упираюсь в стену, пытаясь отладить эту простую вещь. Любая помощь будет высоко оценена!