豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 454 行 · 23451 字节 · UTF-8
§
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「编译器核心」之「网页汇编核心」之「二进制生成」之书。
寻观「裸机后端」之「机器编码」之书。

「:文言:安全散列二五六,依 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 字节),即整串作为一段交给「散列二五六段」。:」
「散列二五六」乃化「字节串」而「字节串」也。
「散列二五六」者会「消息」而
  「散列二五六段」于「消息」于「零」于(「字节串长度」于「消息」)
也。