ATF_TC_BODY(check_files, tc) { FILE *f; unsigned char *sum; f = fopen("foo", "w"); fprintf(f, "bar\n"); fclose(f); sum = pkg_checksum_file("foo", PKG_HASH_TYPE_SHA256_HEX); ATF_REQUIRE_STREQ(sum, "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730"); ATF_CHECK(pkg_checksum_validate_file("foo", "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730") == 0); free(sum); sum=pkg_checksum_generate_file("foo", PKG_HASH_TYPE_SHA256_HEX); ATF_REQUIRE_STREQ(sum, "1$7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730"); }
int pkg_from_old(struct pkg *p) { struct pkg_file *f = NULL; char *sha256; p->type = PKG_INSTALLED; while (pkg_files(p, &f) == EPKG_OK) { if (f->sum[0] == '\0') continue; sha256 = pkg_checksum_file(f->path, PKG_HASH_TYPE_SHA256_HEX); if (sha256) { strlcpy(f->sum, sha256, sizeof(f->sum)); free(sha256); } } return (EPKG_OK); }
int rsa_sign(char *path, struct rsa_key *rsa, unsigned char **sigret, unsigned int *siglen) { char errbuf[1024]; int max_len = 0, ret; char *sha256; if (access(rsa->path, R_OK) == -1) { pkg_emit_errno("access", rsa->path); return (EPKG_FATAL); } if (rsa->key == NULL && _load_rsa_private_key(rsa) != EPKG_OK) { pkg_emit_error("can't load key from %s", rsa->path); return (EPKG_FATAL); } max_len = RSA_size(rsa->key); *sigret = calloc(1, max_len + 1); sha256 = pkg_checksum_file(path, PKG_HASH_TYPE_SHA256_HEX); if (sha256 == NULL) return (EPKG_FATAL); ret = RSA_sign(NID_sha1, sha256, pkg_checksum_type_size(PKG_HASH_TYPE_SHA256_HEX), *sigret, siglen, rsa->key); free(sha256); if (ret == 0) { /* XXX pass back RSA errors correctly */ pkg_emit_error("%s: %s", rsa->path, ERR_error_string(ERR_get_error(), errbuf)); return (EPKG_FATAL); } return (EPKG_OK); }