豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 314 行 · 20330 字节 · UTF-8
§
「:
文言:多项认证者,取一三五零位素数 p=2^130-5 之上乘法群,逐块累乘而验消息也。
汉语:Poly1305(RFC 7539 §2.5 / RFC 8439 §2.5)一次性消息认证码。纯豫言,自研 26 位肢大整数(int64 仅六十四位,故以 B=2^26 为基数、五肢容一三零位)。
要点:p=2^130-5;r=clamp(key[0:16])、s=key[16:32];逐一六字节块 n=le(块)+2^(8*块长),acc=((acc+n)*r) mod p;tag=(acc+s) 取低一二八位小端一六字节。
关键:limb 积<2^52、累加<2^53 皆安于 int64;2^130=B^5 恰为整基数,故化约取低五肢为 Nlo、余为 Nhi,用 2^130≡5 化 Nlo+5*Nhi 再反复减 p。
:」

寻观「标准库」之书。
寻观「标准库」之「数据结构」之「整数操作」之书。
寻观「标准库」之「数据结构」之「字节串」之书。

「:文言:基数。汉语:基数 B=2^26=67108864,以 1024*65536 计之,免手抄大数之误。:」
「基数」乃化「有」而「整数」也。
「基数」者会「无」而「乘」于「一零二四」于「六五五三六」也。

「:文言:移位十八。汉语:2^18=262144,以 256*1024 计之。:」
「移位十八」乃化「有」而「整数」也。
「移位十八」者会「无」而「乘」于「二五六」于「一零二四」也。

「:文言:模数列。汉语:p=2^130-5 之五肢 [B-5,B-1,B-1,B-1,B-1],自低而高。:」
「模数列」乃化「有」而(「列」于「整数」)也。
「模数列」者会「无」而
    虑「顶」者(「减」于(「基数」于「元」)于「五」)
    而
    虑「次」者(「减」于(「基数」于「元」)于「一」)
    而
    虑「末」者(「缀」授以「整数」于「次」于「罄」)
    而
    虑「四五」者(「缀」授以「整数」于「次」于「末」)
    而
    虑「三四」者(「缀」授以「整数」于「次」于「四五」)
    而
    虑「二三」者(「缀」授以「整数」于「次」于「三四」)
    而「缀」授以「整数」于「顶」于「二三」
也。

「:文言:长度。汉语:列之长度。:」
「长度」乃化(「列」于「整数」)而「整数」也。
「长度」者会「列」而
    鉴「列」而
        有「罄」则「零」
        或有(「缀」于「头」于「尾」)则「加」于「一」于(「长度」于「尾」)
        或有「其他」则「零」
也。

「:文言:取肢。汉语:取第 i 肢,出列则零。:」
「取肢」乃化(「列」于「整数」)而化「整数」而「整数」也。
「取肢」者会「列」而会「i」而
    鉴「列」而
        有「罄」则「零」
        或有(「缀」于「头」于「尾」)则
            若「等零」于「i」则「头」否则「取肢」于「尾」于(「减」于「i」于「一」)
        或有「其他」则「零」
也。

「:文言:取前。汉语:取前 k 肢。:」
「取前」乃化(「列」于「整数」)而化「整数」而(「列」于「整数」)也。
「取前」者会「列」而会「k」而
    若「等零」于「k」则「罄」
    否则
        鉴「列」而
            有「罄」则「罄」
            或有(「缀」于「头」于「尾」)则「缀」授以「整数」于「头」于(「取前」于「尾」于(「减」于「k」于「一」))
            或有「其他」则「罄」
也。

「:文言:取后。汉语:取自第 k 肢起之所有肢。:」
「取后」乃化(「列」于「整数」)而化「整数」而(「列」于「整数」)也。
「取后」者会「列」而会「k」而
    若「等零」于「k」则「列」
    否则
        鉴「列」而
            有「罄」则「罄」
            或有(「缀」于「头」于「尾」)则「取后」于「尾」于(「减」于「k」于「一」)
            或有「其他」则「列」
也。

「:文言:反转累。汉语:逐头累缀而成反转列。:」
「反转累」乃化(「列」于「整数」)而化(「列」于「整数」)而(「列」于「整数」)也。
「反转累」者会「列」而会「积」而
    鉴「列」而
        有「罄」则「积」
        或有(「缀」于「头」于「尾」)则「反转累」于「尾」于(「缀」授以「整数」于「头」于「积」)
        或有「其他」则「积」
也。
「:文言:反转。汉语:列反转(累缀成逆,故边界处用以正序)。:」
「反转」乃化(「列」于「整数」)而(「列」于「整数」)也。
「反转」者会「列」而「反转累」于「列」于「罄」也。

「:文言:加法累。汉语:两肢列相加,进位传播。:」
「加累」乃化(「列」于「整数」)而化(「列」于「整数」)而化「整数」而化「整数」而化「整数」而化(「列」于「整数」)而(「列」于「整数」)也。
「加累」者会「甲」而会「乙」而会「i」而会「n」而会「进」而会「积」而
    若「等」于「i」于「n」则
        若「等零」于「进」则「积」否则「缀」授以「整数」于「进」于「积」
    否则
        虑「和」者(「加」于(「加」于(「取肢」于「甲」于「i」)于(「取肢」于「乙」于「i」))于「进」)
        而
        虑「商」者(「除以」于「和」于(「基数」于「元」))
        而「加累」于「甲」于「乙」于(「加」于「i」于「一」)于「n」于「商」于(「缀」授以「整数」于(「减」于「和」于(「乘」于「商」于(「基数」于「元」)))于「积」)
也。
「:文言:加法。汉语:两肢列相加。:」
「加甲乙」乃化(「列」于「整数」)而化(「列」于「整数」)而(「列」于「整数」)也。
「加甲乙」者会「甲」而会「乙」而
    虑「la」者(「长度」于「甲」)
    而
    虑「lb」者(「长度」于「乙」)
    而
    虑「n」者(若「大于」于「la」于「lb」则「la」否则「lb」)
    而「反转」于(「加累」于「甲」于「乙」于「零」于「n」于「零」于「罄」)
也。

「:文言:减法累。汉语:两肢列相减,借位传播(设甲不小于乙)。:」
「减累」乃化(「列」于「整数」)而化(「列」于「整数」)而化「整数」而化「整数」而化「整数」而化(「列」于「整数」)而(「列」于「整数」)也。
「减累」者会「甲」而会「乙」而会「i」而会「n」而会「借」而会「积」而
    若「等」于「i」于「n」则「积」
    否则
        虑「差」者(「减」于(「减」于(「取肢」于「甲」于「i」)于(「取肢」于「乙」于「i」))于「借」)
        而
        若「小于」于「差」于「零」
        则「减累」于「甲」于「乙」于(「加」于「i」于「一」)于「n」于「一」于(「缀」授以「整数」于(「加」于「差」于(「基数」于「元」))于「积」)
        否则「减累」于「甲」于「乙」于(「加」于「i」于「一」)于「n」于「零」于(「缀」授以「整数」于「差」于「积」)
也。
「:文言:减法。汉语:两肢列相减。:」
「减甲乙」乃化(「列」于「整数」)而化(「列」于「整数」)而(「列」于「整数」)也。
「减甲乙」者会「甲」而会「乙」而
    虑「la」者(「长度」于「甲」)
    而
    虑「lb」者(「长度」于「乙」)
    而
    虑「n」者(若「大于」于「la」于「lb」则「la」否则「lb」)
    而「反转」于(「减累」于「甲」于「乙」于「零」于「n」于「零」于「罄」)
也。

「:文言:乘小肢累。汉语:肢列乘以小于基数之小整数,进位传播。:」
「乘单累」乃化(「列」于「整数」)而化「整数」而化「整数」而化「整数」而化「整数」而化(「列」于「整数」)而(「列」于「整数」)也。
「乘单累」者会「列」而会「k」而会「i」而会「n」而会「进」而会「积」而
    若「等」于「i」于「n」则
        若「等零」于「进」则「积」否则「缀」授以「整数」于「进」于「积」
    否则
        虑「积值」者(「加」于(「乘」于(「取肢」于「列」于「i」)于「k」)于「进」)
        而
        虑「商」者(「除以」于「积值」于(「基数」于「元」))
        而「乘单累」于「列」于「k」于(「加」于「i」于「一」)于「n」于「商」于(「缀」授以「整数」于(「减」于「积值」于(「乘」于「商」于(「基数」于「元」)))于「积」)
也。
「:文言:乘小肢。汉语:肢列乘以小整数。:」
「乘单」乃化(「列」于「整数」)而化「整数」而(「列」于「整数」)也。
「乘单」者会「列」而会「k」而
    虑「n」者(「长度」于「列」)
    而「反转」于(「乘单累」于「列」于「k」于「零」于「n」于「零」于「罄」)
也。

「:文言:乘积。汉语:两肢列相乘(大数乘),以乙之肢逐位乘单再加。:」
「乘积」乃化(「列」于「整数」)而化(「列」于「整数」)而(「列」于「整数」)也。
「乘积」者会「甲」而会「乙」而
    鉴「乙」而
        有「罄」则「罄」
        或有(「缀」于「乙头」于「乙尾」)则「加甲乙」于(「乘单」于「甲」于「乙头」)于(「缀」授以「整数」于「零」于(「乘积」于「甲」于「乙尾」))
        或有「其他」则「罄」
也。

「:文言:比同。汉语:等长肢列自高肢比较(爻:甲不小于乙)。:」
「比同」乃化(「列」于「整数」)而化(「列」于「整数」)而化「整数」而「爻」也。
「比同」者会「甲」而会「乙」而会「i」而
    若「小于」于「i」于「零」则「阳」
    否则
        虑「x」者(「取肢」于「甲」于「i」)
        而
        虑「y」者(「取肢」于「乙」于「i」)
        而
        若「大于」于「x」于「y」则「阳」
        否则若「小于」于「x」于「y」则「阴」
        否则「比同」于「甲」于「乙」于(「减」于「i」于「一」)
也。
「:文言:比。汉语:比较甲不小于乙(爻)。:」
「比」乃化(「列」于「整数」)而化(「列」于「整数」)而「爻」也。
「比」者会「甲」而会「乙」而
    虑「la」者(「长度」于「甲」)
    而
    虑「lb」者(「长度」于「乙」)
    而
    若「大于」于「la」于「lb」则「阳」
    否则若「小于」于「la」于「lb」则「阴」
    否则「比同」于「甲」于「乙」于(「减」于「la」于「一」)
也。

「:文言:化到小。汉语:反复减 p 直至小于 p。:」
「化到小」乃化(「列」于「整数」)而(「列」于「整数」)也。
「化到小」者会「t」而
    若「比」于「t」于(「模数列」于「元」)
    则「化到小」于(「减甲乙」于「t」于(「模数列」于「元」))
    否则「t」
也。
「:文言:化约。汉语:以 2^130≡5 化 c 为 c 对 p 之余。取低五肢 Nlo、余 Nhi,成 Nlo+5*Nhi 再减 p 至小。:」
「化约」乃化(「列」于「整数」)而(「列」于「整数」)也。
「化约」者会「c」而
    虑「lo」者(「取前」于「c」于「五」)
    而
    虑「hi」者(「取后」于「c」于「五」)
    而「化到小」于(「加甲乙」于「lo」于(「乘单」于「hi」于「五」))
也。

「:文言:右移八累。汉语:肢列右移八位(供逐字节提取)。:」
「右八累」乃化(「列」于「整数」)而化「整数」而化「整数」而化(「列」于「整数」)而(「列」于「整数」)也。
「右八累」者会「列」而会「i」而会「n」而会「积」而
    若「等」于「i」于「n」则「积」
    否则
        虑「高」者(「取肢」于「列」于(「加」于「i」于「一」))
        而
        虑「低八高」者(「减」于「高」于(「乘」于(「除以」于「高」于「二五六」)于「二五六」))
        而
        虑「新」者(「加」于(「除以」于(「取肢」于「列」于「i」)于「二五六」)于(「乘」于「低八高」于(「移位十八」于「元」)))
        而「右八累」于「列」于(「加」于「i」于「一」)于「n」于(「缀」授以「整数」于(「减」于「新」于(「乘」于(「除以」于「新」于(「基数」于「元」))于(「基数」于「元」)))于「积」)
也。
「:文言:右移八。汉语:肢列右移八位。:」
「右八」乃化(「列」于「整数」)而(「列」于「整数」)也。
「右八」者会「列」而
    虑「n」者(「长度」于「列」)
    而「反转」于(「右八累」于「列」于「零」于「n」于「罄」)
也。

「:文言:位累。汉语:以 256 连乘 n 次自 1 起,成 2^(8*n)。:」
「位累」乃化「整数」而化(「列」于「整数」)而(「列」于「整数」)也。
「位累」者会「n」而会「列」而
    若「等零」于「n」则「列」否则「位累」于(「减」于「n」于「一」)于(「乘单」于「列」于「二五六」)
也。
「:文言:位。汉语:2^(8*n)。:」
「位」乃化「整数」而(「列」于「整数」)也。
「位」者会「n」而「位累」于「n」于(「缀」授以「整数」于「一」于「罄」)也。

「:文言:块转数累。汉语:取字节串自 start 起 count 字节,小端成数。:」
「块转累」乃化「字节串」而化「整数」而化「整数」而化「整数」而化(「列」于「整数」)而化(「列」于「整数」)而(「列」于「整数」)也。
「块转累」者会「串」而会「起」而会「数」而会「i」而会「积」而会「幂」而
    若「等」于「i」于「数」则「积」
    否则
        虑「b」者(「字节串取字节」于「串」于(「加」于「起」于「i」))
        而「块转累」于「串」于「起」于「数」于(「加」于「i」于「一」)于(「加甲乙」于「积」于(「乘单」于「幂」于「b」))于(「乘单」于「幂」于「二五六」)
也。
「:文言:块转数。汉语:取字节串一段小端成数。:」
「块转数」乃化「字节串」而化「整数」而化「整数」而(「列」于「整数」)也。
「块转数」者会「串」而会「起」而会「数」而「块转累」于「串」于「起」于「数」于「零」于「罄」于(「缀」授以「整数」于「一」于「罄」)也。

「:文言:数转字节串累。汉语:取数低一二八位,小端逐字节累积。:」
「数转累」乃化(「列」于「整数」)而化「整数」而化「字节串」而「字节串」也。
「数转累」者会「n」而会「i」而会「积」而
    若「等」于「i」于「一六」则「积」
    否则
        虑「b」者(「减」于(「取肢」于「n」于「零」)于(「乘」于(「除以」于(「取肢」于「n」于「零」)于「二五六」)于「二五六」))
        而「数转累」于(「右八」于「n」)于(「加」于「i」于「一」)于(「拼接字节串」于「积」于(「单字节串」于「b」))
也。
「:文言:数转字节串。汉语:取数低一二八位小端成一六字节串。:」
「数转字节串」乃化(「列」于「整数」)而「字节串」也。
「数转字节串」者会「n」而「数转累」于「n」于「零」于(「空字节串」于「元」)也。

「:文言:与零f。汉语:字节按 0x0f 清顶四位。:」
「与零f」乃化「整数」而「整数」也。
「与零f」者会「x」而「减」于「x」于(「乘」于(「除以」于「x」于「一六」)于「一六」)也。
「:文言:与零fc。汉语:字节按 0xfc 清底两位。:」
「与零fc」乃化「整数」而「整数」也。
「与零fc」者会「x」而「减」于「x」于(「减」于「x」于(「乘」于(「除以」于「x」于「四」)于「四」))也。

「:文言:取掩字节。汉语:clamp——三、七、一一、一五四位清顶,四、八、一二二位清底,余不动。:」
「取掩字节」乃化「字节串」而化「整数」而「整数」也。
「取掩字节」者会「串」而会「i」而
    虑「x」者(「字节串取字节」于「串」于「i」)
    而
    若「等」于「i」于「三」则「与零f」于「x」
    否则若「等」于「i」于「七」则「与零f」于「x」
    否则若「等」于「i」于「一一」则「与零f」于「x」
    否则若「等」于「i」于「一五」则「与零f」于「x」
    否则若「等」于「i」于「四」则「与零fc」于「x」
    否则若「等」于「i」于「八」则「与零fc」于「x」
    否则若「等」于「i」于「一二」则「与零fc」于「x」
    否则「x」
也。

「:文言:取掩串累。汉语:逐字节 clamp。:」
「取掩累」乃化「字节串」而化「整数」而化「字节串」而「字节串」也。
「取掩累」者会「串」而会「i」而会「积」而
    若「等」于「i」于「一六」则「积」
    否则「取掩累」于「串」于(「加」于「i」于「一」)于(「拼接字节串」于「积」于(「单字节串」于(「取掩字节」于「串」于「i」)))
也。
「:文言:取掩串。汉语:以 clamp 成 key 首一六字节之掩串。:」
「取掩串」乃化「字节串」而「字节串」也。
「取掩串」者会「串」而「取掩累」于「串」于「零」于(「空字节串」于「元」)也。

「:文言:多项累。汉语:逐块 acc=((acc+n+2^(8*块长))*r) mod p。:」
「多项累」乃化「字节串」而化「整数」而化(「列」于「整数」)而化(「列」于「整数」)而(「列」于「整数」)也。
「多项累」者会「串」而会「i」而会「r」而会「acc」而
    虑「总」者(「字节串长度」于「串」)
    而
    若「小于」于「i」于「总」
    则
        虑「余」者(「减」于「总」于「i」)
        而
        虑「块长」者(若「大于」于「余」于「一六」则「一六」否则「余」)
        而
        虑「n」者(「块转数」于「串」于「i」于「块长」)
        而
        虑「mark」者(「位」于「块长」)
        而「多项累」于「串」于(「加」于「i」于「一六」)于「r」于(「化约」于(「乘积」于(「加甲乙」于(「加甲乙」于「acc」于「n」)于「mark」)于「r」))
    否则「acc」
也。

「:文言:多项认证。汉语:Poly1305 主入口,返一六字节小端 tag。:」
「多项认证」乃化「字节串」而化「字节串」而「字节串」也。
「多项认证」者会「key」而会「msg」而
    虑「r串」者(「取掩串」于「key」)
    而
    虑「r」者(「块转数」于「r串」于「零」于「一六」)
    而
    虑「s」者(「块转数」于「key」于「一六」于「一六」)
    而
    「数转字节串」于(「加甲乙」于(「多项累」于「msg」于「零」于「r」于「罄」)于「s」)
也。