WhirlpoolSwift

CI

在 Swift 中实现的 WHIRLPOOL 哈希函数。此 Swift 封装器封装了 WHIRPOOL 参考实现。

WHIRLPOOL 是由 Vincent Rijmen 和 Paulo S. L. M. Barreto 设计的哈希函数,它对长度小于 2256 位的消息进行操作,并生成 512 位的消息摘要。

WHIRLPOOL 已被国际标准化组织 (ISO) 采用,纳入 ISO/IEC 10118-3:2004 标准。

用法

通过 Swift Package Manager 导入此软件包。将以下依赖项添加到您的 Package.swift 文件中

// Select a package version:
.package(url: "https://github.com/mingchen/WhirlpoolSwift.git", from: "1.0.0")

// Select a product: WhirlpoolSwift
.product(name: "WhirlpoolSwift", package: "whirlpoolswift")

代码示例

import WhirlpoolSwift

let data1: Data = ...
let data2: Data = ...

var whirlpool = Whirlpool()
whirlpool.update(data: data1)
whirlpool.update(data: data2)
let digest = whirlpool.finalize()   // 64 bytes digest

或者,对于最小的数据,可以在一行代码中完成。

import WhirlpoolSwift

let input = "The quick brown fox jumps over the lazy dog"
let digest = Whirlpool.hash(data: input.data(using: .utf8)!)    // 64 bytes digest

函数

WHIRLPOOL 使用 Merkle-Damgård 强化和 Miyaguchi-Preneel 哈希方案,并使用一个专用的 512 位块密码,称为 W。这包括以下内容。要进行哈希处理的位字符串首先用一个 '&lquo;'1'-bit' 填充,然后用一系列 '0'-bit 填充,最后用原始长度(以 256 位整数值的形式)填充,以便填充后的长度是 512 位的倍数。生成的消​息​字​符​串​被划分为一系列 512 位块 m1, m2, ... mt,然后用于生成一系列中间哈希值 H0, H1, H2, ... Ht。根据定义,H0 是一个由 512 个 '0'-bit 组成的字符串。要计算 Hi,W 使用 Hi-1 作为密钥加密 mi,并将结果密文与 Hi-1 和 mi 进行异或运算。最后,WHIRLPOOL 消息摘要是 Ht。

MiyaguchiPreneel Hash

名称

WHIRLPOOL 哈希函数的名称来源于猎犬座中的漩涡星系(M51 或 NGC 5194),威廉·帕森斯,第三代罗斯伯爵,于 1845 年 4 月首次识别出该星系具有螺旋结构(参见 M. Hoskin,“剑桥图解天文学史”,剑桥大学出版社,1997 年)。

许可

公共领域。请参阅LICENSE

参考资料