HMAC SHA-256

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
IKSoft
Посетитель
Сообщения: 42
Зарегистрирован: 27 Май 2010, 13:38

HMAC SHA-256

Сообщение IKSoft »

Доброго всем дня!

Вот понадобилась такая функция HMAC SHA-256
Кто чем пользуется?
Дайте наводку

RFC 4634 прочел, но, может, у кого есть готовая dll?

SWIFT ссылается на RFC2104 ('HMAC SHA-256 is based on RFC2104'), только вместо md5 надо SHA-256...

нужны
SHA256_Init
SHA256_update
SHA256_final

по аналогии с md5
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7329
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

HMAC SHA-256

Сообщение Игорь Столяров »

Все эти вещи лучше (проще) делать через скрипты, т.к. много готовых примеров.
Закатывать это всё в DLL и отлаживать - это путь достойный самурая. ;)
А если раз, два и в кассу (как я) - то прикрепил примеры работы с CryptoPro.
Кстати, до сих работают по всему Югу РФ, как и программа на Clarion 5.
Сам в шоке. :)
Вложения
remnant.zip
Примеры скриптов для CryptoPro
(5.23 КБ) 119 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

HMAC SHA-256

Сообщение Губин Игорь »

Кажется, на форуме была библиотека со всем этим...
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

HMAC SHA-256

Сообщение RaFaeL »

У меня есть HMAC_SHA1

Код: Выделить всё

HMAC_SHA1 procedure(string str_,string key_)

LOC:Ret              CSTRING(41)
LOC:HMAC             CSTRING(21)

 CODE
  LOC:HMAC=HMAC(EVP_sha1(),address(key_),len(clip(key_)),address(Str_),len(clip(Str_)),0,0)

  loop i# = 1 to 20
    LOC:Ret = LOC:Ret & bytetohex(val(LOC:HMAC[i#]), 1)
  end

  return LOC:Ret
и есть SHA256

Код: Выделить всё

Hash_SHA256 procedure(string str_)

LOC:Ret              CSTRING(65)
LOC:SHA256           CSTRING(33)

 CODE

  SHA256(address(Str_),len(clip(Str_)),address(LOC:SHA256))

  loop i# = 1 to 32
    LOC:Ret = LOC:Ret & bytetohex(val(LOC:SHA256[i#]), 1)
  end

  return LOC:Ret

Т.е. чтобы получить HMAC_SHA256 надо скрестить две функции в третью ) Добавить какой-нито EVP_SHA256()

Код: Выделить всё

    MODULE('libeay32.dll')
      EVP_sha1(),LONG,RAW,C,NAME('EVP_sha1')
      HMAC(LONG EVP, LONG secret, LONG secretlen, LONG buffer, LONG bufferlen, LONG md, LONG mdlen),*CSTRING,RAW,C,NAME('HMAC')
      SHA1(LONG buffer, LONG bufferlen, LONG outstr),RAW,C,NAME('SHA1')
      SHA256(LONG buffer, LONG bufferlen, LONG outstr),RAW,C,NAME('SHA256')
      MD5(LONG buffer, LONG bufferlen, LONG outstr),RAW,C,NAME('MD5')
IKSoft
Посетитель
Сообщения: 42
Зарегистрирован: 27 Май 2010, 13:38

HMAC SHA-256

Сообщение IKSoft »

Вот моя HMAC но для MD5

Опять же, мне надо аналогичные
SHA256_Init
SHA256_update
SHA256_final

(в Сигнатурской dll нашел, но нет прототипов - буду опять же по аналогии пробовать)

Код: Выделить всё

tcMD5.mHMAC   function(long p_Text, long p_Text_len, long p_key, long p_key_len, long p_digest)
gMD5_CTX        group(tgMD5_CTX).

k_ipad  byte,dim(65)     
k_opad  byte,dim(65) 

loc:i  long

  code
  memset(address(k_ipad), 0, size(k_ipad) )
  memset(address(k_opad), 0, size(k_opad) )

  MemCpy(address(k_ipad), p_key, p_key_len)
  MemCpy(address(k_opad), p_key, p_key_len)

  loop loc:i = 1 to 64
       k_ipad[loc:i] = bxor(k_ipad[loc:i], 036h)
       k_opad[loc:i] = bxor(k_opad[loc:i], 05Ch)
  end


  self.mMD5Init  (gMD5_CTX)
  self.mMD5Update(gMD5_CTX, address(k_ipad), 64)
  self.mMD5Update(gMD5_CTX, p_Text, p_Text_len)
  self.mMD5Final (p_digest, gMD5_CTX )

  self.mMD5Init  (gMD5_CTX)
  self.mMD5Update(gMD5_CTX, address(k_opad), 64)
  self.mMD5Update(gMD5_CTX, p_digest, 16)
  self.mMD5Final (p_digest, gMD5_CTX )

  return(0)
Ответить