晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/proc/thread-self/root/proc/self/root/usr/include/bind9/isc/ |
| Current File : //proc/thread-self/root/proc/self/root/usr/include/bind9/isc/hmac.h |
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
/*!
* \file isc/hmac.h
* \brief This is the header for for message authentication code.
*/
#pragma once
#include <isc/lang.h>
#include <isc/md.h>
#include <isc/platform.h>
#include <isc/result.h>
#include <isc/types.h>
typedef void isc_hmac_t;
/**
* isc_hmac:
* @type: the digest type
* @key: the key
* @keylen: the length of the key
* @buf: data to hash
* @len: length of the data to hash
* @digest: the output buffer
* @digestlen: the length of the data written to @digest
*
* This function computes the message authentication code using a digest type
* @type with key @key which is @keylen bytes long from data in @buf which is
* @len bytes long, and places the output into @digest, which must have space
* for the hash function output (use ISC_MAX_MD_SIZE if unsure). If the
* @digestlen parameter is not NULL then the number of bytes of data written
* (i.e. the length of the digest) will be written to the @digestlen.
*/
isc_result_t
isc_hmac(const isc_md_type_t *type, const void *key, const int keylen,
const unsigned char *buf, const size_t len, unsigned char *digest,
unsigned int *digestlen);
/**
* isc_hmac_new:
*
* This function allocates, initializes and returns HMAC context.
*/
isc_hmac_t *
isc_hmac_new(void);
/**
* isc_hmac_free:
* @md: HMAC context
*
* This function cleans up HMAC context and frees up the space allocated to it.
*/
void
isc_hmac_free(isc_hmac_t *hmac);
/**
* isc_hmac_init:
* @md: HMAC context
* @key: HMAC key
* @keylen: HMAC key length
* @type: digest type
*
* This function sets up HMAC context to use a hash function of @type and key
* @key which is @keylen bytes long.
*/
isc_result_t
isc_hmac_init(isc_hmac_t *hmac, const void *key, size_t keylen,
const isc_md_type_t *type);
/**
* isc_hmac_reset:
* @hmac: HMAC context
*
* This function resets the HMAC context. This can be used to reuse an already
* existing context.
*/
isc_result_t
isc_hmac_reset(isc_hmac_t *hmac);
/**
* isc_hmac_update:
* @hmac: HMAC context
* @buf: data to hash
* @len: length of the data to hash
*
* This function can be called repeatedly with chunks of the message @buf to be
* authenticated which is @len bytes long.
*/
isc_result_t
isc_hmac_update(isc_hmac_t *hmac, const unsigned char *buf, const size_t len);
/**
* isc_hmac_final:
* @hmac: HMAC context
* @digest: the output buffer
* @digestlen: the length of the data written to @digest
*
* This function retrieves the message authentication code from @hmac and places
* it in @digest, which must have space for the hash function output. If the
* @digestlen parameter is not NULL then the number of bytes of data written
* (i.e. the length of the digest) will be written to the @digestlen. After
* calling this function no additional calls to isc_hmac_update() can be made.
*/
isc_result_t
isc_hmac_final(isc_hmac_t *hmac, unsigned char *digest,
unsigned int *digestlen);
/**
* isc_hmac_md_type:
* @hmac: HMAC context
*
* This function return the isc_md_type_t previously set for the supplied
* HMAC context or NULL if no isc_md_type_t has been set.
*/
const isc_md_type_t *
isc_hmac_get_md_type(isc_hmac_t *hmac);
/**
* isc_hmac_get_size:
*
* This function return the size of the message digest when passed an isc_hmac_t
* structure, i.e. the size of the hash.
*/
size_t
isc_hmac_get_size(isc_hmac_t *hmac);
/**
* isc_hmac_get_block_size:
*
* This function return the block size of the message digest when passed an
* isc_hmac_t structure.
*/
int
isc_hmac_get_block_size(isc_hmac_t *hmac);
|