コード例 #1
0
ファイル: crypto.c プロジェクト: Nersle/skype_part3_source
int _get_sha1_data(char *buf, int len, char *outbuf, int need_convert){
	unsigned int dwtmp;

	SHA_hash(buf,len,outbuf);


	if (need_convert) {
		// invert data by integer big/little endian
		memcpy(&dwtmp,outbuf,4);
		dwtmp=bswap32(dwtmp);
		memcpy(outbuf,&dwtmp,4);

		memcpy(&dwtmp,outbuf+4,4);
		dwtmp=bswap32(dwtmp);
		memcpy(outbuf+4,&dwtmp,4);

		memcpy(&dwtmp,outbuf+8,4);
		dwtmp=bswap32(dwtmp);
		memcpy(outbuf+8,&dwtmp,4);

		memcpy(&dwtmp,outbuf+12,4);
		dwtmp=bswap32(dwtmp);
		memcpy(outbuf+12,&dwtmp,4);

		memcpy(&dwtmp,outbuf+16,4);
		dwtmp=bswap32(dwtmp);
		memcpy(outbuf+16,&dwtmp,4);
	};



	return 0;
}
コード例 #2
0
ファイル: sha1.c プロジェクト: coreboot/chrome-ec
const uint8_t *DCRYPTO_SHA1_hash(const void *data, uint32_t n,
				uint8_t *digest)
{
	if (dcrypto_grab_sha_hw())
		/* dcrypto_sha_wait() will release the hw. */
		dcrypto_sha_hash(SHA1_MODE, data, n, digest);
	else
		SHA_hash(data, n, digest);
	return digest;
}
コード例 #3
0
// Read a file into memory; optionally (retouch_flag == RETOUCH_DO_MASK) mask
// the retouched entries back to their original value (such that SHA-1 checks
// don't fail due to randomization); store the file contents and associated
// metadata in *file.
//
// Return 0 on success.
int LoadFileContents(const char* filename, FileContents* file,
                     int retouch_flag) {
    file->data = NULL;

    // A special 'filename' beginning with "MTD:" or "EMMC:" means to
    // load the contents of a partition.
    if (strncmp(filename, "MTD:", 4) == 0 ||
        strncmp(filename, "EMMC:", 5) == 0) {
        return LoadPartitionContents(filename, file);
    }

    if (stat(filename, &file->st) != 0) {
        printf("failed to stat \"%s\": %s\n", filename, strerror(errno));
        return -1;
    }

    file->size = file->st.st_size;
    file->data = malloc(file->size);

    FILE* f = fopen(filename, "rb");
    if (f == NULL) {
        printf("failed to open \"%s\": %s\n", filename, strerror(errno));
        free(file->data);
        file->data = NULL;
        return -1;
    }

    ssize_t bytes_read = fread(file->data, 1, file->size, f);
    if (bytes_read != file->size) {
        printf("short read of \"%s\" (%ld bytes of %ld)\n",
               filename, (long)bytes_read, (long)file->size);
        free(file->data);
        file->data = NULL;
        return -1;
    }
    fclose(f);

    // apply_patch[_check] functions are blind to randomization. Randomization
    // is taken care of in [Undo]RetouchBinariesFn. If there is a mismatch
    // within a file, this means the file is assumed "corrupt" for simplicity.
    if (retouch_flag) {
        int32_t desired_offset = 0;
        if (retouch_mask_data(file->data, file->size,
                              &desired_offset, NULL) != RETOUCH_DATA_MATCHED) {
            printf("error trying to mask retouch entries\n");
            free(file->data);
            file->data = NULL;
            return -1;
        }
    }

    SHA_hash(file->data, file->size, file->sha1);
    return 0;
}
コード例 #4
0
ファイル: c4pkg_hash_sha1.c プロジェクト: zt515/c4pkg
uint8_t* c4pkg_hash_sha1(char *data, int len, int *retsz)
{
  if (!data || len < 0) {
    return NULL;
  }
  
  uint8_t *digest = (uint8_t*) malloc(sizeof(uint8_t) * SHA_DIGEST_SIZE);
  if (!digest) {
    return NULL;
  }
  
  if (retsz) {
    *retsz = SHA_DIGEST_SIZE;
  }
  
  SHA_hash(data, len, digest);
  return digest;
}
コード例 #5
0
// Read a file into memory; store the file contents and associated
// metadata in *file.
//
// Return 0 on success.
int LoadFileContents(const char* filename, FileContents* file) {
    file->data = NULL;

    // A special 'filename' beginning with "MTD:" or "EMMC:" means to
    // load the contents of a partition.
    if (strncmp(filename, "MTD:", 4) == 0 ||
        strncmp(filename, "EMMC:", 5) == 0) {
        return LoadPartitionContents(filename, file);
    }

    if (stat(filename, &file->st) != 0) {
        printf("failed to stat \"%s\": %s\n", filename, strerror(errno));
        return -1;
    }

    file->size = file->st.st_size;
    file->data = malloc(file->size);

    FILE* f = fopen(filename, "rb");
    if (f == NULL) {
        printf("failed to open \"%s\": %s\n", filename, strerror(errno));
        free(file->data);
        file->data = NULL;
        return -1;
    }

    ssize_t bytes_read = fread(file->data, 1, file->size, f);
    if (bytes_read != file->size) {
        printf("short read of \"%s\" (%ld bytes of %ld)\n",
               filename, (long)bytes_read, (long)file->size);
        free(file->data);
        file->data = NULL;
        return -1;
    }
    fclose(f);

    SHA_hash(file->data, file->size, file->sha1);
    return 0;
}