// ------------------------------------------------------------------ DXChannel ----// DXChannel::DXChannel(DXSound &ds, BufferDesc desc) : dxs(ds), bdesc(desc) { init_desc(desc); HRESULT ret = ds.sound->CreateSoundBuffer(&bufdesc, &buffer, NULL); if (FAILED(ret)) { printf("Not create dxbuffer 0x%x", ret); throw ret; } }
SIFTs* get_sifts(const char* file){ SIFTs* desc; float temp; short x; unsigned int nlines; // apertura file stream ifstream inFile; inFile.open( file ); if(!inFile) { cerr << "Unable to open file " << file << endl; exit(1); } // conteggio righe nlines = 0; while(!inFile.eof()){ if(inFile.get() == '\n') nlines++; } // alloca spazio del vettore di sift desc = init_desc(nlines); // stream reset inFile.clear(); inFile.seekg(0); // lettura file // salta i primi quattro dati inFile >> temp; inFile >> temp; inFile >> temp; inFile >> temp; for(int sift_count = 0; !inFile.eof(); sift_count++){ // lettura delle 128 distanze for(int j = 0; j < SIFT_SIZE; j++){ inFile >> x; desc->sift_array[sift_count*SIFT_SIZE+j] = x; } // salta i primi quattro dati di ogni nuova riga inFile >> temp; inFile >> temp; inFile >> temp; inFile >> temp; } // chiusura file stream inFile.close(); return desc; }
/* * Calculate the HMAC value across the set of protected security xattrs. * * Instead of retrieving the requested xattr, for performance, calculate * the hmac using the requested xattr value. Don't alloc/free memory for * each xattr, but attempt to re-use the previously allocated memory. */ static int evm_calc_hmac_or_hash(struct dentry *dentry, const char *req_xattr_name, const char *req_xattr_value, size_t req_xattr_value_len, char type, char *digest) { struct inode *inode = dentry->d_inode; struct shash_desc *desc; char **xattrname; size_t xattr_size = 0; char *xattr_value = NULL; int error; int size; if (!inode->i_op || !inode->i_op->getxattr) return -EOPNOTSUPP; desc = init_desc(type); if (IS_ERR(desc)) return PTR_ERR(desc); error = -ENODATA; for (xattrname = evm_config_xattrnames; *xattrname != NULL; xattrname++) { if ((req_xattr_name && req_xattr_value) && !strcmp(*xattrname, req_xattr_name)) { error = 0; crypto_shash_update(desc, (const u8 *)req_xattr_value, req_xattr_value_len); continue; } size = vfs_getxattr_alloc(dentry, *xattrname, &xattr_value, xattr_size, GFP_NOFS); if (size == -ENOMEM) { error = -ENOMEM; goto out; } if (size < 0) continue; error = 0; xattr_size = size; crypto_shash_update(desc, (const u8 *)xattr_value, xattr_size); } hmac_add_misc(desc, inode, digest); out: kfree(xattr_value); kfree(desc); return error; }
int evm_init_hmac(struct inode *inode, const struct xattr *lsm_xattr, char *hmac_val) { struct shash_desc *desc; desc = init_desc(); if (IS_ERR(desc)) { printk(KERN_INFO "init_desc failed\n"); return PTR_ERR(desc); } crypto_shash_update(desc, lsm_xattr->value, lsm_xattr->value_len); hmac_add_misc(desc, inode, hmac_val); kfree(desc); return 0; }
/* * Calculate the MD5/SHA1 file digest */ int ima_calc_hash(struct file *file, char *digest) { struct hash_desc desc; struct scatterlist sg[1]; loff_t i_size, offset = 0; char *rbuf; int rc; rc = init_desc(&desc); if (rc != 0) return rc; rbuf = kzalloc(PAGE_SIZE, GFP_KERNEL); if (!rbuf) { rc = -ENOMEM; goto out; } i_size = i_size_read(file->f_dentry->d_inode); while (offset < i_size) { int rbuf_len; rbuf_len = kernel_read(file, offset, rbuf, PAGE_SIZE); if (rbuf_len < 0) { rc = rbuf_len; break; } if (rbuf_len == 0) break; offset += rbuf_len; sg_init_one(sg, rbuf, rbuf_len); rc = crypto_hash_update(&desc, sg, rbuf_len); if (rc) break; } kfree(rbuf); if (!rc) rc = crypto_hash_final(&desc, digest); out: crypto_free_hash(desc.tfm); return rc; }
rc = crypto_hash_final(&desc, digest); out: crypto_free_hash(desc.tfm); return rc; } /* * Calculate the hash of a given template */ int ima_calc_template_hash(int template_len, void *template, char *digest) { struct hash_desc desc; struct scatterlist sg[1]; int rc; rc = init_desc(&desc); if (rc != 0) return rc; sg_init_one(sg, template, template_len); rc = crypto_hash_update(&desc, sg, template_len); if (!rc) rc = crypto_hash_final(&desc, digest); crypto_free_hash(desc.tfm); return rc; } static void __init ima_pcrread(int idx, u8 *pcr) { if (!ima_used_chip) return;