散列二五六。豫
yuyan · 454 行 · 23451 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「编译器核心」之「网页汇编核心」之「二进制生成」之书。
寻观「裸机后端」之「机器编码」之书。
「:文言:安全散列二五六,依 FIPS 180-4。高级之模无位运之原语,故以两张字节之表(与、异或)及乘除成三十二位之与、异或、循环右移与右移。汉语:SHA-256(FIPS 180-4)的纯豫言实现,供苹果平台代码签名等使用。高级模式没有位运算原语,这里用两张 256×256 的字节查表(按位与、按位异或,各分两级存放)加整数乘除,实现 32 位的与、异或、非、循环右移与右移。:」
「字模」乃「整数」也。
「字模」者「四二九四九六七二九六」也。
「字满」乃「整数」也。
「字满」者「四二九四九六七二九五」也。
「:文言:写整数于数组之格。汉语:把整数写入混合数组的指定槽位。:」
「写字」乃化「混合数组引用类」而化「整数」而化「整数」而「有」也。
「写字」者会「表」而会「号」而会「值」而
「写混合数组引用」授以「整数」于「表」于「号」于「值」
也。
「:文言:以整数之列造数组,依序写之。汉语:把整数列表逐项写入新的混合数组(下标从零开始)。:」
「列转字表」乃化(「列」于「整数」)而「混合数组引用类」也。
「列转字表」者会「项们」而
虑「表」者「新混合数组引用」于(「长度」授以「整数」于「项们」)而
递归虑「写」其化「整数」而化(「列」于「整数」)而「有」者会「号」而
会「余」而
鉴「余」而
有「罄」则「元」
或有「缀」于「首」于「尾」则
(「写字」于「表」于「号」于「首」;
「写」于(「加」于「号」于「一」)于「尾」)
而
虑「无」者「写」于「零」于「项们」而
「表」
也。
「:文言:逐位合二字节:与则相乘,异或则相加取二之余。汉语:逐位合并两个字节:按位与时两位相乘,按位异或时两位相加取模 2。权从 1 到 128。:」
「逐位合」乃化「整数」而化「整数」而化「整数」而化「爻」而「整数」也。
「逐位合」者会「甲」而会「乙」而会「权」而会「与」而
若「等于」于「权」于「二五六」则
「零」
否则
虑「甲位」者「整数余数」于(「除以」于「甲」于「权」)于「二」而
虑「乙位」者「整数余数」于(「除以」于「乙」于「权」)于「二」而
虑「位」者
若「与」则「乘」于「甲位」于「乙位」否则「整数余数」于(「加」于「甲位」于「乙位」)于「二」
而
「加」于(「乘」于「位」于「权」)于(「逐位合」于「甲」于「乙」于(「乘」于「权」于「二」)于「与」)
也。
「:文言:以表置于外表之格。汉语:把内表写入外表的指定槽位。:」
「写表」乃化「混合数组引用类」而化「整数」而化「混合数组引用类」而「有」也。
「写表」者会「外」而会「号」而会「内」而
「写混合数组引用」授以「混合数组引用类」于「外」于「号」于「内」
也。
「:文言:造二级之表:外表二百五十六格,第甲格为一内表,内表第乙格存甲乙之合。分为小表者,免一次求大块之存。汉语:生成 256×256 的字节运算表,分两级存放:外表第 甲 格是一张 256 格的内表,内表第 乙 格存两字节的运算结果。拆成小表是为了避免一次分配 65536 格的大对象(原生运行时的初始堆放不下)。:」
「造字节表」乃化「爻」而「混合数组引用类」也。
「造字节表」者会「与」而
虑「外」者「新混合数组引用」于「二五六」而
递归虑「填内」其化「混合数组引用类」而化「整数」而化「整数」而「有」者会「内」而
会「甲」而
会「乙」而
若「等于」于「乙」于「二五六」则
「元」
否则
(「写字」于「内」于「乙」于(「逐位合」于「甲」于「乙」于「一」于「与」);
「填内」于「内」于「甲」于(「加」于「乙」于「一」))
而
递归虑「填」其化「整数」而「有」者会「甲」而
若「等于」于「甲」于「二五六」则
「元」
否则
(
虑「内」者「新混合数组引用」于「二五六」
而
虑「无」者「填内」于「内」于「甲」于「零」而
(「写表」于「外」于「甲」于「内」;
「填」于(「加」于「甲」于「一」))
)
而
虑「无」者「填」于「零」而
「外」
也。
「字节异或表」乃「混合数组引用类」也。
「字节异或表」者「造字节表」于「阴」也。
「字节与表」乃「混合数组引用类」也。
「字节与表」者「造字节表」于「阳」也。
「查字节表」乃化「混合数组引用类」而化「整数」而化「整数」而「整数」也。
「查字节表」者会「表」而会「甲」而会「乙」而
「读混合数组引用」授以「整数」
于(「读混合数组引用」授以「混合数组引用类」于「表」于「甲」)
于「乙」
也。
「:文言:三十二位之合,分四字节查表而后并之。汉语:32 位按位运算:拆成四个字节分别查表,再按权合并。:」
「字合」乃化「混合数组引用类」而化「整数」而化「整数」而「整数」也。
「字合」者会「表」而会「甲」而会「乙」而
虑「零位」者
「查字节表」于「表」于(「整数余数」于「甲」于「二五六」)
于(「整数余数」于「乙」于「二五六」)而
虑「一位」者
「查字节表」
于「表」
于(「整数余数」于(「除以」于「甲」于「二五六」)于「二五六」)
于(「整数余数」于(「除以」于「乙」于「二五六」)于「二五六」)
而
虑「二位」者
「查字节表」
于「表」
于(「整数余数」于(「除以」于「甲」于「六五五三六」)于「二五六」)
于(「整数余数」于(「除以」于「乙」于「六五五三六」)于「二五六」)
而
虑「三位」者
「查字节表」于「表」于(「除以」于「甲」于「一六七七七二一六」)
于(「除以」于「乙」于「一六七七七二一六」)
而
「加」
于「零位」
于(「加」
于(「乘」于「一位」于「二五六」)
于(「加」于(「乘」于「二位」于「六五五三六」)于(「乘」于「三位」于「一六七七七二一六」)))
也。
「字异或」乃化「整数」而化「整数」而「整数」也。
「字异或」者会「甲」而会「乙」而
「字合」于「字节异或表」于「甲」于「乙」
也。
「字与」乃化「整数」而化「整数」而「整数」也。
「字与」者会「甲」而会「乙」而
「字合」于「字节与表」于「甲」于「乙」
也。
「字非」乃化「整数」而「整数」也。
「字非」者会「甲」而
「减」于「字满」于「甲」
也。
「字加」乃化「整数」而化「整数」而「整数」也。
「字加」者会「甲」而会「乙」而
「整数余数」于(「加」于「甲」于「乙」)于「字模」
也。
「二的幂」乃化「整数」而「整数」也。
「二的幂」者会「次」而
若「等于」于「次」于「零」则
「一」
否则
「乘」于「二」于(「二的幂」于(「减」于「次」于「一」))
也。
「字右转」乃化「整数」而化「整数」而「整数」也。
「字右转」者会「甲」而会「次」而
虑「低」者「二的幂」于「次」而
「加」
于(「除以」于「甲」于「低」)
于(「乘」于(「整数余数」于「甲」于「低」)于(「二的幂」于(「减」于「三二」于「次」)))
也。
「字右移」乃化「整数」而化「整数」而「整数」也。
「字右移」者会「甲」而会「次」而
「除以」于「甲」于(「二的幂」于「次」)
也。
「大西格马零」乃化「整数」而「整数」也。
「大西格马零」者会「甲」而
「字异或」
于(「字异或」于(「字右转」于「甲」于「二」)于(「字右转」于「甲」于「一三」))
于(「字右转」于「甲」于「二二」)
也。
「大西格马一」乃化「整数」而「整数」也。
「大西格马一」者会「甲」而
「字异或」
于(「字异或」于(「字右转」于「甲」于「六」)于(「字右转」于「甲」于「一一」))
于(「字右转」于「甲」于「二五」)
也。
「小西格马零」乃化「整数」而「整数」也。
「小西格马零」者会「甲」而
「字异或」
于(「字异或」于(「字右转」于「甲」于「七」)于(「字右转」于「甲」于「一八」))
于(「字右移」于「甲」于「三」)
也。
「小西格马一」乃化「整数」而「整数」也。
「小西格马一」者会「甲」而
「字异或」
于(「字异或」于(「字右转」于「甲」于「一七」)于(「字右转」于「甲」于「一九」))
于(「字右移」于「甲」于「一零」)
也。
「择」乃化「整数」而化「整数」而化「整数」而「整数」也。
「择」者会「甲」而会「乙」而会「丙」而
「字异或」于(「字与」于「甲」于「乙」)于(「字与」于(「字非」于「甲」)于「丙」)
也。
「多数」乃化「整数」而化「整数」而化「整数」而「整数」也。
「多数」者会「甲」而会「乙」而会「丙」而
「字异或」于(「字异或」于(「字与」于「甲」于「乙」)于(「字与」于「甲」于「丙」))
于(「字与」于「乙」于「丙」)
也。
「:文言:轮常数六十四,取前六十四素数立方根之小数部。汉语:64 个轮常数(前 64 个素数立方根小数部分的前 32 位)。:」
「散列轮常数」乃「混合数组引用类」也。
「散列轮常数」者
「列转字表」于(「列」【
「一一一六三五二四零八」,
「一八九九四四七四四一」,
「三零四九三二三四七一」,
「三九二一零零九五七三」,
「九六一九八七一六三」,
「一五零八九七零九九三」,
「二四五三六三五七四八」,
「二八七零七六三二二一」,
「三六二四三八一零八零」,
「三一零五九八四零一」,
「六零七二二五二七八」,
「一四二六八八一九八七」,
「一九二五零七八三八八」,
「二一六二零七八二零六」,
「二六一四八八八一零三」,
「三二四八二二二五八零」,
「三八三五三九零四零一」,
「四零二二二二四七七四」,
「二六四三四七零七八」,
「六零四八零七六二八」,
「七七零二五五九八三」,
「一二四九一五零一二二」,
「一五五五零八一六九二」,
「一九九六零六四九八六」,
「二五五四二二零八八二」,
「二八二一八三四三四九」,
「二九五二九九六八零八」,
「三二一零三一三六七一」,
「三三三六五七一八九一」,
「三五八四五二八七一一」,
「一一三九二六九九三」,
「三三八二四一八九五」,
「六六六三零七二零五」,
「七七三五二九九一二」,
「一二九四七五七三七二」,
「一三九六一八二二九一」,
「一六九五一八三七零零」,
「一九八六六六一零五一」,
「二一七七零二六三五零」,
「二四五六九五六零三七」,
「二七三零四八五九二一」,
「二八二零三零二四一一」,
「三二五九七三零八零零」,
「三三四五七六四七七一」,
「三五一六零六五八一七」,
「三六零零三五二八零四」,
「四零九四五七一九零九」,
「二七五四二三三四四」,
「四三零二二七七三四」,
「五零六九四八六一六」,
「六五九零六零五五六」,
「八八三九九七八七七」,
「九五八一三九五七一」,
「一三二二八二二二一八」,
「一五三七零零二零六三」,
「一七四七八七三七七九」,
「一九五五五六二二二二」,
「二零二四一零四八一五」,
「二二二七七三零四五二」,
「二三六一八五二四二四」,
「二四二八四三六四七四」,
「二七五六七三四一八七」,
「三二零四零三一四七九」,
「三三二九三二五二九八」
】)
也。
「:文言:初值八,取前八素数平方根之小数部。汉语:8 个初始散列值(前 8 个素数平方根小数部分的前 32 位)。:」
「散列初值」乃(「列」于「整数」)也。
「散列初值」者
「列」【
「一七七九零三三七零三」,
「三一四四一三四二七七」,
「一零一三九零四二四二」,
「二七七三四八零七六二」,
「一三五九八九三一一九」,
「二六零零八二二九二四」,
「五二八七三四六三五」,
「一五四一四五九二二五」
】
也。
「大端字节」乃化「整数」而化「整数」而「字节串」也。
「大端字节」者会「宽」而会「数」而
若「等于」于「宽」于「零」则
「机器空串」
否则
「拼接字节串」
于(「大端字节」于(「减」于「宽」于「一」)于(「除以」于「数」于「二五六」))
于(「机器单字节」于(「整数余数」于「数」于「二五六」))
也。
「取大端字」乃化「字节串」而化「整数」而「整数」也。
「取大端字」者会「字」而会「偏」而
「加」
于(「乘」于(「字节串取字节」于「字」于「偏」)于「一六七七七二一六」)
于(「加」
于(「乘」于(「字节串取字节」于「字」于(「加」于「偏」于「一」))于「六五五三六」)
于(「加」
于(「乘」于(「字节串取字节」于「字」于(「加」于「偏」于「二」))于「二五六」)
于(「字节串取字节」于「字」于(「加」于「偏」于「三」))))
也。
「读字」乃化「混合数组引用类」而化「整数」而「整数」也。
「读字」者会「表」而会「号」而
「读混合数组引用」授以「整数」于「表」于「号」
也。
「:文言:六十四轮,毕则加于状态。汉语:64 轮压缩(尾递归);第 64 轮后把工作变量加回状态数组。:」
「散列轮」乃
化「混合数组引用类」而
化「混合数组引用类」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
「有」
也。
「散列轮」者
会「状」而
会「消息表」而
会「轮」而
会「甲」而
会「乙」而
会「丙」而
会「丁」而
会「戊」而
会「己」而
会「庚」而
会「辛」而
若「等于」于「轮」于「六四」则
(「写字」于「状」于「零」于(「字加」于(「读字」于「状」于「零」)于「甲」);
「写字」于「状」于「一」于(「字加」于(「读字」于「状」于「一」)于「乙」);
「写字」于「状」于「二」于(「字加」于(「读字」于「状」于「二」)于「丙」);
「写字」于「状」于「三」于(「字加」于(「读字」于「状」于「三」)于「丁」);
「写字」于「状」于「四」于(「字加」于(「读字」于「状」于「四」)于「戊」);
「写字」于「状」于「五」于(「字加」于(「读字」于「状」于「五」)于「己」);
「写字」于「状」于「六」于(「字加」于(「读字」于「状」于「六」)于「庚」);
「写字」于「状」于「七」于(「字加」于(「读字」于「状」于「七」)于「辛」))
否则
虑「一时」者
「字加」
于「辛」
于(「字加」
于(「大西格马一」于「戊」)
于(「字加」
于(「择」于「戊」于「己」于「庚」)
于(「字加」于(「读字」于「散列轮常数」于「轮」)于(「读字」于「消息表」于「轮」))))
而
虑「二时」者
「字加」于(「大西格马零」于「甲」)于(「多数」于「甲」于「乙」于「丙」)
而
「散列轮」
于「状」
于「消息表」
于(「加」于「轮」于「一」)
于(「字加」于「一时」于「二时」)于「甲」于「乙」于「丙」
于(「字加」于「丁」于「一时」)于「戊」于「己」于「庚」
也。
「:文言:压一块:立消息表六十四字,而后行六十四轮。汉语:压缩一个 64 字节块:先展开 64 个字的消息表,再以当前状态为工作变量执行 64 轮。:」
「散列压块」乃化「混合数组引用类」而化「字节串」而化「整数」而「有」也。
「散列压块」者会「状」而会「字」而会「始」而
虑「表」者「新混合数组引用」于「六四」而
递归虑「展」其化「整数」而「有」者会「号」而
若「等于」于「号」于「六四」则
「元」
否则
(「写字」
于「表」
于「号」
于(
若「小于」于「号」于「一六」则
「取大端字」于「字」于(「加」于「始」于(「乘」于「号」于「四」))
否则
「字加」
于(「小西格马一」于(「读字」于「表」于(「减」于「号」于「二」)))
于(「字加」
于(「读字」于「表」于(「减」于「号」于「七」))
于(「字加」
于(「小西格马零」于(「读字」于「表」于(「减」于「号」于「一五」)))
于(「读字」于「表」于(「减」于「号」于「一六」))))
);
「展」于(「加」于「号」于「一」))
而
虑「无」者「展」于「零」而
「散列轮」
于「状」
于「表」
于「零」
于(「读字」于「状」于「零」)
于(「读字」于「状」于「一」)
于(「读字」于「状」于「二」)
于(「读字」于「状」于「三」)
于(「读字」于「状」于「四」)
于(「读字」于「状」于「五」)
于(「读字」于「状」于「六」)
于(「读字」于「状」于「七」)
也。
「:文言:散列一段:自「起」取「长」字节,不截取其串;满块者径压于原串,余者与补位合为一二块而压之,以大端出其八字。截取之术每呼宿主而全抄其串,逐页用之则成平方之费,故避之。汉语:计算字节串中从「起」开始、长为「长」的一段的 SHA-256 摘要(32 字节),不截取子串:完整的 64 字节块直接在原串上按偏移压缩;剩下不足一块的字节连同补位(0x80、零字节与 64 位大端位长)拼成一至两块再压缩;最后按大端输出 8 个状态字。「截取字节串」是宿主调用,要复制整个原串,逐页截取大文件会变成平方级开销,所以这里不用它。:」
「散列二五六段」乃化「字节串」而化「整数」而化「整数」而「字节串」也。
「散列二五六段」者会「消息」而会「起」而会「长」而
虑「整块」者「除以」于「长」于「六四」而
虑「尾起」者「加」于「起」于(「乘」于「整块」于「六四」)而
虑「余长」者「减」于「长」于(「乘」于「整块」于「六四」)而
虑「尾」者
「网页拼字节」于(「列」【
「网页拼字节」于(「态射」授以「整数」授以「字节串」
于(「整数范围」于「零」于「余长」)
于(会「号」而「机器单字节」于(「字节串取字节」于「消息」于(「加」于「尾起」于「号」)))),
「机器单字节」于「一二八」,
「零字节」于(「整数余数」于(「减」于「一一九」于「余长」)于「六四」),
「大端字节」于「八」于(「乘」于「长」于「八」)
】)
而
虑「状」者「列转字表」于「散列初值」而
递归虑「压」其化「字节串」而化「整数」而化「整数」而化「整数」而「有」者会「串」而
会「始」而
会「块」而
会「块数」而
若「等于」于「块」于「块数」则「元」否则
(「散列压块」于「状」于「串」于(「加」于「始」于(「乘」于「块」于「六四」));
「压」于「串」于「始」于(「加」于「块」于「一」)于「块数」)
而
虑「无」者「压」于「消息」于「起」于「零」于「整块」而
虑「无二」者
「压」于「尾」于「零」于「零」于(「除以」于(「字节串长度」于「尾」)于「六四」)
而
「网页拼字节」于(「态射」授以「整数」授以「字节串」
于(「整数范围」于「零」于「八」)
于(会「号」而「大端字节」于「四」于(「读字」于「状」于「号」)))
也。
「:文言:散列二五六:全串为一段。汉语:计算整个字节串的 SHA-256 摘要(32 字节),即整串作为一段交给「散列二五六段」。:」
「散列二五六」乃化「字节串」而「字节串」也。
「散列二五六」者会「消息」而
「散列二五六段」于「消息」于「零」于(「字节串长度」于「消息」)
也。