-- Error handling for synthesis. -- Copyright (C) 2017 Tristan Gingold -- -- This file is part of GHDL. -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 2 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . package body Synth.Errors is procedure Error_Msg_Netlist (Loc : Location_Type; Msg : String; Args : Earg_Arr := No_Eargs) is begin Report_Msg (Msgid_Error, Errorout.Elaboration, +Loc, Msg, Args); end Error_Msg_Netlist; function To_Coord (N : Node) return Source_Coord_Type is begin return +Get_Location (N); end To_Coord; procedure Error_Msg_Synth (Inst : Synth_Instance_Acc; Loc : Node; Msg : String; Arg1 : Earg_Type) is begin Report_Msg (Msgid_Error, Errorout.Elaboration, To_Coord (Loc), Msg, (1 => Arg1)); if Inst /= null and then Debug_Handler /= null then Debug_Handler (Inst, Loc); end if; end Error_Msg_Synth; procedure Error_Msg_Synth (Inst : Synth_Instance_Acc; Loc : Node; Msg : String; Args : Earg_Arr := No_Eargs) is begin Report_Msg (Msgid_Error, Errorout.Elaboration, To_Coord (Loc), Msg, Args); if Inst /= null and then Debug_Handler /= null then Debug_Handler (Inst, Loc); end if; end Error_Msg_Synth; procedure Warning_Msg_Synth (Warnid : Msgid_Warnings; Loc : Location_Type; Msg : String; Arg1 : Earg_Type) is begin Report_Msg (Warnid, Errorout.Elaboration, +Loc, Msg, (1 => Arg1)); end Warning_Msg_Synth; procedure Warning_Msg_Synth (Warnid : Msgid_Warnings; Loc : Location_Type; Msg : String; Args : Earg_Arr := No_Eargs) is begin Report_Msg (Warnid, Errorout.Elaboration, +Loc, Msg, Args); end Warning_Msg_Synth; procedure Warning_Msg_Synth (Loc : Location_Type; Msg : String; Args : Earg_Arr := No_Eargs) is begin Report_Msg (Msgid_Warning, Errorout.Elaboration, +Loc, Msg, Args); end Warning_Msg_Synth; procedure Info_Msg_Synth (Loc : Location_Type; Msg : String; Args : Earg_Arr := No_Eargs) is begin Report_Msg (Msgid_Note, Errorout.Elaboration, +Loc, Msg, Args); end Info_Msg_Synth; end Synth.Errors; 3'>3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Random number generation
========================

When generating random data for use in cryptographic operations, such as an
initialization vector for encryption in
:class:`~cryptography.hazmat.primitives.ciphers.modes.CBC` mode, you do not
want to use the standard :mod:`random` module APIs. This is because they do not
provide a cryptographically secure random number generator, which can result in
major security issues depending on the algorithms in use.

Therefore, it is our recommendation to `always use your operating system's
provided random number generator`_, which is available as ``os.urandom()``. For
example, if you need 16 bytes of random data for an initialization vector, you
can obtain them with:

.. code-block:: pycon

    >>> import os
    >>> os.urandom(16)
    '...'

.. _`always use your operating system's provided random number generator`: http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/