S4Crypto 2.2.10

S4Crypto 2.2.10

Vinnie MoscaritoloRobbie Hanson维护。



S4Crypto 2.2.10

  • 4th-ATechnologies

S4Crypto

S4Crypto是一个现代的、广泛的跨平台加密函数库,可以从C API以及JavaScript中调用。它是为可移植性设计的,因此它可以针对不同的架构进行交叉编译,包括macOS、iOS、Linux、Android和Windows。

S4Crypto还能构建成JavaScript webassembly 库。

S4Crypto还包含一套完整兼容FIPS-140的操作和CAVP测试。

S4Crypto是storm4和zerodark.cloud使用的加密库。

特性

S4允许程序员以高级C调用的形式使用它,而无需深入了解底层加密算法。它提供了一个一致且易于使用的接口。

散列算法

支持以下散列算法:

  • MD5

  • SHA-1

  • SHA-2 224/256/384/512

  • SHA-3 224/256/384/512

  • KECCAK_256(如图所示在Ethereum中使用)

  • SKEIN-256, 512, 1024

  • xxHash 32/64

消息认证代码

支持HMAC和SKEIN版本的MAC,适用于所有合适的散列算法。

对称加密函数

以下加密方式受到支持:

  • AES 128/192/256
  • Twofish-256

支持的模式包括EBC、CBC,以及带有填充的CBC编解码

可调整块加密

Threefish在256、512和1024位模式下都受到支持。

公钥函数

以下公钥算法受到支持:

密钥拆分
S4Crypto 密钥 API

S4Crypto还提供了更高级的API,通过JSON表示管理处理对称、公钥和分割加密密钥。

S4Crypto的密钥编码示例

#AES-128 key wrapped by Argon2 encoded passphrase
"{
    "version": 1,
    "encoding": "p2k",
    "keySuite": "AES-128",
    "p2k-params": "$Argon2d$m=65536,t=2,p=1,k=16$wzXNtftfk/s=",
    "mac": "YqEnigy+Y78=",
    "esk": "mC564p9mn7AXP/qmFI9l6A==",
    "iv": "FplyP4pAdcBoAkLgbIOGng==",
    "encrypted": "GktZqypxDbZUuCW5WfhGcw==",
    "encodedObject": "AES-128"
}
#AES-256 key wrapped by ECC public key
 { 
     "version": 1,
    "encoding": "Curve41417",
    "keyID": "I0zFCdE4foQamhXa/f1u4Q==",
    "keySuite": "AES-256",
    "mac": "wHgedFID0nQ=",
    "encrypted": "MIGkBglghkgBZQMEAgEE...vtdB+wVgNQcufVkoork3mY="
 }
#AES-128 key split into 8 shares with payload and one of the shares
{ 
    "version": 1,
    "encoding": "Shamir-AES256",
    "keySuite": "AES-128",
    "mac": "POStvPXgTXA=",
    "threshold": 6,
    "totalShares": 8,
    "shareOwner": "qRiYlopAc3w=",
    "iv": "xsbKvBr8bh3BprWy+pZnqhO6Gwj035RyNKgOcpmHiuE=",
    "encrypted": "t/L35MhILRR2cBh2QHeKqw==",
    "shareIDs": [
        "/uVqyD/TCw8=",
        "MN9PaXCEMug=",
        "Te/h6RWNV+A=",
        "HY7veIQBRwQ=",
        "bF20c6keLJQ=",
        "R4i5eWjeGIs=",
        "DDnQNZhnCHk=",
        "kUuV20lxNvM="
    ],
}
{
    "version": 1,
    "keySuite": "Shamir",
    "shareOwner": "qRiYlopAc3w=",
    "shareID": "/uVqyD/TCw8=",
    "threshold": 6,
    "index": 5,
    "encrypted": "mkfi6TjyBi1lGzFEwZ9+dJJoKXpWz2Xk6SxMX6t/Vos=",
} 
#Curve41417 self-signed public key 
{
	"version":1,
	"keySuite":"Curve41417",
	"keyID":"k/Ot8M1rrE9gsAQ52wfatQ==",
	"pubKey":"BB1oTbiIzXvKAeoEGGpDNs1L25++9fD...eENIcVdgbFSnN0U1n1r",
	"start-date":"2018-10-31T16:51:11Z",
	"signable-properties":["keyID","keySuite","pubKey","start-date"],
	"signatures":[
		{
			"sigID":"rGXAFobko5RCinIFBRkMoA==",
			"hashAlgorithm":"SHA-256",
			"signature":"MGwCNAUY8MbJv0XnvB0C...8xDradimCNzVpTr+sr54=",
			"issuer":"k/Ot8M1rrE9gsAQ52wfatQ==",
			"issue-date":"2018-10-31T16:51:11Z",
			"sig-expire":0,
			"signed-properties":["keyID","keySuite","pubKey","start-date"]
		}
	]
}

开始使用

最低部署目标是iOS 9.2 / macOS 10.10 / tvOS 9.0 / watchOS 2.0。

cocoaPods

安装 S4Crypto 最简单的方式是使用 cocoaPods。

use_frameworks!
pod 'S4Crypto', :git=>'https://github.com/4th-ATechnologies/S4'

执行 pod install 后,打开您的 .xcworkspace 并导入

// Swift
import S4Crypto     
// Objective-C on iOS 8+ with `use_frameworks!`
@import S4Crypto;

Carthage

S4Crypto.xcodeproj 项目包含针对 iOS、macOS、tvOS 和 watchOS 的框架目标。

构建 S4Crypto

如果您希望自行构建这些框架,可以使用 makefile 或 'S4Crypto.xcodeproj' 文件

为 macOS 构建

S4Crypto 的 macOS 版本使用 Xcode 10.1 构建,并使用 S4Crypto-osx 目标。这将生成放在 build/osx/Debug 或 build/osx/Release 目录下的 S4Crypto.Framework。已提供 Xcode 测试和操作测试。可以使用 S4-optest Xcode 目标构建和运行操作测试。

为 iOS 构建

S4Crypto 的 iOS 版本使用 Xcode 10.1 构建,可以选择生成静态库或框架。只提供了调用操作测试的 Xcode 测试。可以使用 S4Crypto-ios-static 测试目标构建和运行 Xcode 测试操作测试。

使用 Web Assembly 为 JavaScript 构建

S4Crypto 可以使用 emsdk 为 JavaScript 构建。构建此项目的最简单方法是运行 make em_s4。这将生成 libS4.js、libS4.wasm 和 libS4.bc 文件。

运营测试

S4Crypto 包含一套完整的运营测试,它可以对所有逻辑接口进行测试,也可以作为 FIPS-140 验证的一部分。

在 macOS 上,可以通过运行 make optest_osx 来创建操作测试,然后通过运行 make run_optest_osx 来执行。

CAVP 测试

S4Crypto 能够处理由 CAVP 产生的以下测试向量:

  • AES 块密码在 ECB、CBC 模式下
  • 安全哈希 SHA-1、SHA-2 和 SHA-3
  • 消息认证(HMAC)

在 macOS 上,可以通过运行 make cavp_osx 来创建操作测试,然后通过运行 make run_cavp 来执行。提供了一套已知答案测试(KAT)。