Страница 1 из 1

HMAC SHA-256

Добавлено: 22 Ноябрь 2021, 17:00
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

HMAC SHA-256

Добавлено: 22 Ноябрь 2021, 20:03
Игорь Столяров
Все эти вещи лучше (проще) делать через скрипты, т.к. много готовых примеров.
Закатывать это всё в DLL и отлаживать - это путь достойный самурая. ;)
А если раз, два и в кассу (как я) - то прикрепил примеры работы с CryptoPro.
Кстати, до сих работают по всему Югу РФ, как и программа на Clarion 5.
Сам в шоке. :)

HMAC SHA-256

Добавлено: 23 Ноябрь 2021, 15:03
Губин Игорь
Кажется, на форуме была библиотека со всем этим...

HMAC SHA-256

Добавлено: 23 Ноябрь 2021, 22:17
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')

HMAC SHA-256

Добавлено: 24 Ноябрь 2021, 16:18
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)