小编K. *_*ann的帖子

奇怪的JavaScript性能

当我在JavaScript中实现ChaCha20时,我偶然发现了一些奇怪的行为.

我的第一个版本是这样构建的(我们称之为"Encapsulated Version"):

function quarterRound(x, a, b, c, d) {
    x[a] += x[b]; x[d] = ((x[d] ^ x[a]) << 16) | ((x[d] ^ x[a]) >>> 16);
    x[c] += x[d]; x[b] = ((x[b] ^ x[c]) << 12) | ((x[b] ^ x[c]) >>> 20);
    x[a] += x[b]; x[d] = ((x[d] ^ x[a]) <<  8) | ((x[d] ^ x[a]) >>> 24);
    x[c] += x[d]; x[b] = ((x[b] ^ x[c]) <<  7) | ((x[b] ^ x[c]) >>> 25);
}

function getBlock(buffer) {
    var x …
Run Code Online (Sandbox Code Playgroud)

javascript performance

12
推荐指数
1
解决办法
910
查看次数

在Swift中捕获NSFileHandleOperationException

我怎样才能NSFileHandleOperationException在Swift中找到一个?

我使用fileHandle.readDataToEndOfFile()哪些调用(根据文档)fileHandle.readDataOfLength()可以抛出(再次根据文档)a NSFileHandleOperationException.

我怎么能抓住这个例外?我试过了

do {
    return try fH.readDataToEndOfFile()
} catch NSFileHandleOperationException {
    return nil
}
Run Code Online (Sandbox Code Playgroud)

但Xcode说

警告:'try'表达式中不会调用抛出函数

警告:'catch'块无法访问,因为'do'块中没有抛出错误

我该怎么做呢?

编辑:我决定用C的好老fopen,fread,fclose作为一种解决方法:

extension NSMutableData {
    public enum KCStd$createFromFile$err: ErrorType {
        case Opening, Reading, Length
    }

    public static func KCStd$createFromFile(path: String, offset: Int = 0, length: Int = 0) throws -> NSMutableData {
        let fh = fopen(NSString(string: path).UTF8String, NSString(string: "r").UTF8String)
        if fh == nil { throw KCStd$createFromFile$err.Opening }
        defer …
Run Code Online (Sandbox Code Playgroud)

exception swift

7
推荐指数
1
解决办法
974
查看次数

Xcode"ld:找不到用于架构x86_64的库"

我想在我的swift项目中包含libgpg-error和libgcrypt,并创建了以下module.modulemaps:

libgpgerror:

module libgpgerror {
    header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/gpg-error.h"
    link "'/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib'"
    export *
}
Run Code Online (Sandbox Code Playgroud)

libgcrypt:

module libgcrypt {
    header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgcrypt/gcrypt.h"
    link "'/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgcrypt/libgcrypt-1.6.5.dylib'"
    export *
}
Run Code Online (Sandbox Code Playgroud)

我还/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/**为项目和目标添加了"Swift编译器 - 搜索路径/导入路径":找到模块,路径是正确的.

但是,如果我想编译项目,我会收到以下错误:

ld: library not found for -l'/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib' for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

但如果我这样做

file /Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib
Run Code Online (Sandbox Code Playgroud)

我得到了输出

/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/libgpgerror-1.21.dylib: Mach-O 64-bit dynamically linked shared library x86_64
Run Code Online (Sandbox Code Playgroud)

因此,图书馆似乎位于正确的位置,并且具有正确的架构.


编辑

我找到了一个解决方法:我从模块映射中删除了link-directive并手动链接了这些库; 这似乎有效.但为什么?

module libgpgerror {
    header "/Volumes/Xcode/Programme/Swifts/KCAnon/KCAnon_Client/Libs/libgpgerror/gpg-error.h"
    export *
}
Run Code Online (Sandbox Code Playgroud)

xcode build shared-libraries ld

6
推荐指数
1
解决办法
4101
查看次数

HMAC实施失败

我希望这是正确的论坛; 我不确定我是否应该在stackoverflow,加密或安全性中问这个问题.

所以我的问题是php的hash_hmac函数仅适用于php> = 5.1.2.因为有些服务器没有更新到这个版本,所以我根据php的哈希函数编写了自己的HMAC实现.但代码不会产生与hash_hmac相同的输出...

那我的错误在哪里?

define("HASH_ALGO", "sha512");
define("HMAC_BLOCKSIZE", 64);

function computeHMAC($message, $key) {
    $ikey;
    $okey;
    $zero = hex2bin("00");
    $ipad = hex2bin("36");
    $opad = hex2bin("5C");

    /*
     *  HMAC construction scheme:
     *  $ikey = $key padded with zeroes to blocksize and then each byte xored with 0x36
     *  $okey = $key padded with zeroes to blocksize and then each byte xored with 0x5C
     *  hash($okey . hash($ikey . $message))
     */

    //Hash key if it is larger than HMAC_BLOCKSIZE
    if (strlen($key) > …
Run Code Online (Sandbox Code Playgroud)

php hash hmac

5
推荐指数
1
解决办法
303
查看次数

是否可以匹配`const fn`的结果?

我试过天真的方法

fn main() -> Result<(), Box<std::error::Error>> {
    let num = 0;
    match num {
        u64::max_value() => println!("Is u64::max_value()"),
        _ => println!("Is boring")
    }
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

但它失败了expected tuple struct/variant, found method <u64>::max_value

除了n if n == u64::max_value() => ...我可以使用的语法之外,还有其他语法吗?

constants pattern-matching rust

5
推荐指数
1
解决办法
1529
查看次数

是否在C中允许/安全地使用不同尺寸的结构?

我有一些struct像这样的:

struct myStruct0 {
    void(*deallocMe)(void*); // points always to "myStruct0_dealloc"
    uint8_t* someStuff;
    void* someOtherStuff;
}
void myStruct0_dealloc(void* structPtr) {
    myStruct0* s = (myStruct0*)structPtr;
    free(s->someStuff);
    free(s->someOtherStuff);
    free(s);
}

struct myStruct1 {
    void(*deallocMe)(void*); // points always to "myStruct1_dealloc"
    uint8_t* someStuff;
    uint64_t largeArray[4096];
    void* someOtherStuff;
    char* someRealOtherStuff;
}
void myStruct1_dealloc(void* structPtr) {
    myStruct1* s = (myStruct1*)structPtr;
    free(s->someStuff);
    free(s->someOtherStuff);
    free(s->someRealOtherStuff);
    free(s);
}
Run Code Online (Sandbox Code Playgroud)

无论structS和指针使用分配的malloc(当然不能是NULL).

以下代码是否安全?

struct genericForm {
    void(*deallocMe)(void*);
}

void deallocMyStructX(void* myStructX) {
    genericForm* x = (genericForm*)myStructX;
    x->deallocMe(myStructX);
}
Run Code Online (Sandbox Code Playgroud)

我为什么要这样做? …

c struct pointers casting type-conversion

1
推荐指数
1
解决办法
204
查看次数

C++对象指针改变位置

我有一个函数需要两个指针,一个指向字符串对象,另一个指向自定义KCData对象:

void KCConverter::dataToHexStringBuf(std::string *hexStringBuf, KCData *data) {
    char hexBuf[2];
    size_t position = data->getPosition();
    size_t length = data->getLength();
    uint8_t *copy = new uint8_t[data->getLength()];
    memcpy(copy, data->bytes, data->getLength());

    uint8_t current;
    for (size_t i = position; i < length; i++) {
        std::cout << "Reading char " << i << std::endl;
        current = copy[i];
        sprintf(hexBuf, "%02X", current);
        hexStringBuf->push_back(hexBuf[0]);
        hexStringBuf->push_back(hexBuf[1]);
    }
    data->setPosition(data->getLength());
}
Run Code Online (Sandbox Code Playgroud)

但是,for循环中KCData指针的值正在改变:

第一次迭代: 第一次迭代

第二次迭代: 在此输入图像描述

第三次迭代: 在此输入图像描述

但是,如果我取消注释该行sprintf(hexBuf, "%02X", current);,则指针不再更改.但为什么要sprintf更改data???? 的指针地址?

PS:如果你把我的问题投下来,那么了解原因会很好,所以我可以改进我的问题:)

c c++ pointers

-3
推荐指数
1
解决办法
93
查看次数